RFC 9891
Automated Certificate Management Environment (ACME) Delay-Tolerant Networking (DTN) Node ID Validation Extension
RFC 9891: ACME Delay-Tolerant Networking (DTN) Node ID Validation Extension π¦
Okay bestie, this is RFC 9891 π It's an IETF document written by B. Sipos at RKF Engineering, dated November 2025. It's in the Experimental category, and its ISSN is 2070-1721 π§ The header doesn't list anything it obsoletes or updates, so it stands on its own β¨
Abstract
Okay so the big idea: this doc is an extension to the Automated Certificate Management Environment (ACME) protocol π It lets an ACME server validate the Delay-Tolerant Networking (DTN) Node ID for an ACME client, which is literally the whole point.
A DTN Node ID is an identifier the Bundle Protocol (BP) uses to name a "singleton endpoint," meaning an endpoint registered on one single BP Node πΈ The Node ID gets encoded two ways: as a certificate Subject Alternative Name (SAN) identity of type otherName with an Other Name form of BundleEID, and as an ACME Identifier type called "bundleEID" π
Status of This Memo
Real talk, this document is not an Internet Standards Track specification. It's published so people can examine it, try it out experimentally, and evaluate it π§
It does define an Experimental Protocol for the Internet community β It's a product of the IETF and reflects the consensus of the IETF community. It went through public review and got approved for publication by the Internet Engineering Steering Group (IESG). Not every IESG-approved doc is a candidate for any level of Internet Standard, so check Section 2 of RFC 7841 if you want the full picture π
For status info, errata, and feedback, head to https://www.rfc-editor.org/info/rfc9891 π
Copyright Notice
Copyright (c) 2025 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, which you can find at https://trustee.ietf.org/license-info as they stood on the publication date. Please actually read these, because they spell out your rights and restrictions for this document π Code Components pulled out of this document must include the Revised BSD License text described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as the Revised BSD License describes π
Table of Contents
1. Introduction
1.1. Scope
1.2. Authorization Strategy
1.3. Use of CDDL
1.4. Terminology
1.5. Experiment Scope
2. Bundle EID ACME Identifier
2.1. Subsets of Bundle EID
3. DTN Node ID Validation
3.1. DTN Node ID Challenge Object
3.2. DTN Node ID Response Object
3.3. ACME Node ID Validation Challenge Bundle
3.3.1. Challenge Bundle Checks
3.4. ACME Node ID Validation Response Bundles
3.4.1. Response Bundle Checks
3.5. Multi-Perspective Validation
4. Bundle Integrity Gateway
5. Certificate Request Profile
5.1. Multiple Identity Claims
5.2. Generating Encryption-Only or Signing-Only Bundle Security
Certificates
6. Security Considerations
6.1. Threat: Passive Leak of Validation Data
6.2. Threat: BP Node Impersonation
6.3. Threat: Bundle Replay
6.4. Threat: Denial of Service
6.5. Inherited Security Considerations
6.6. Out-of-Scope BP Agent Communication
7. IANA Considerations
7.1. ACME Identifier Types
7.2. ACME Validation Methods
7.3. Bundle Administrative Record Types
8. References
8.1. Normative References
8.2. Informative References
Appendix A. Administrative Record Types CDDL
Appendix B. Example Authorization
B.1. Challenge Bundle
B.2. Response Bundle
Acknowledgements
Author's Address
1. Introduction β¨
Okay so the original purpose of the Automatic Certificate Management Environment (ACME) [RFC8555] was to let Public Key Infrastructure using X.509 (PKIX) Certification Authorities (CAs) validate network domain names for clients π· But the same mechanism works for any of the subject identity claims the PKIX profile [RFC5280] supports, which is honestly iconic π
Here, the claim being validated is a Subject Alternative Name (SAN) identity of type otherName with an Other Name form of BundleEID. That's what represents a Bundle Protocol (BP) Endpoint ID (EID) in a Delay-Tolerant Networking (DTN) overlay network π¦ A DTN Node ID is any EID that can uniquely identify a BP Node, as defined in Section 4.2.5.2 of [RFC9171]. That's the same as saying the EID is usable as a singleton endpoint. One super common EID used as a Node ID is the Administrative EID, which is guaranteed to exist on any BP Node π At the time of writing, the URI schemes "dtn" and "ipn" from Section 4.2.5.1 of [RFC9171] are valid for a singleton endpoint, so they count as Node IDs too π Because the BundleEID claim is brand new to ACME, we need a new ACME Identifier type, "bundleEID," to manage it inside ACME messaging π«Ά
Once an ACME server validates a Node ID, it can do that as a pre-authorization of identifier type "bundleEID", or as one of the authorizations in an order that contains an identifier type "bundleEID". Then the client can finalize the order using an associated Certificate Signing Request (CSR) π Here's the messy part: a single order can contain multiple identifiers of multiple types. A client trying to validate all of those might run into operational issues, and it could fail, as described in Section 5.1 π Once a certificate is issued for a Node ID, how the ACME client configures the BP Agent with that new certificate is an implementation matter, so that's on the implementers π οΈ
1.1. Scope
Okay, so this doc describes the ACME message contents [RFC8555], Bundle Protocol version 7 (BPv7) payloads [RFC9171], and Bundle Protocol Security (BPSec) operations [RFC9172] that are needed to validate claims of Node ID ownership π₯
It does not cover the following, though:
- Mechanisms for communication between an ACME client or ACME server and their associated BP Agent(s). Those are depicted as steps 1, 2, 5, and 6 of Figure 1. This document only describes exchanges between ACME client-server pairs and between their respective associated BP Agents π ββοΈ
- Specific BP extension blocks or BPSec contexts needed to meet the security requirements of this protocol. The exact security context needed, and its parameters, is network specific π
- Policies or mechanisms for defining or configuring Bundle integrity gateways, or for trusting integrity gateways on an individual entity or across a network π
- Mechanisms for locating or identifying other Bundle entities (peers) within a network or across an internet. Mapping a Node ID to a potential Convergence-Layer (CL) protocol and network address is left to the implementation and configuration of the BP Agent and its various potential routing strategies π§
- Logic for routing Bundles along a path toward a Bundle's endpoint. This protocol is only involved in creating Bundles at a source and handling them at a destination π
- Logic for performing rate control and congestion control of Bundle transfers. The ACME server is responsible for rate control of validation requests πΈ
- Policies or mechanisms for an ACME server to choose a prioritized list of acceptable hash algorithms, or for an ACME client to choose a set of acceptable hash algorithms π
- Policies or mechanisms for provisioning, deploying, or accessing certificates and private keys; deploying or accessing Certificate Revocation Lists (CRLs); or configuring security parameters on an individual entity or across a network π
- Policies or mechanisms for an ACME server to handle mixed-use certificate signing requests. This specification is focused only on single-use DTN-specific PKIX profiles π
Part 1 of 7 is done, bestie π More parts are coming, so stay tuned π¦
1.2. Authorization Strategy π
Okay so, the basic unit of data exchange in a DTN is a Bundle [RFC9171] π¦. It's a data payload with metadata riding along. An EID is used as the destination of a Bundle, and it can be a singleton or a group destination. A Node ID identifies the source of a Bundle and gets used for routing through intermediate nodes, including the final node(s) that deliver a Bundle to its destination endpoint. A Node ID can also be an endpoint for Bundles carrying administrative records, as explained in Section 6 of [RFC9171]. If you want the rationale and the capabilities of these networks, go check the "Delay-Tolerant Networking Architecture" [RFC4838] π§
Now the main event π When an ACME client requests a pre-authorization or an order with an identifier type "bundleEID" (Section 2), the ACME server offers a "bp-nodeid-00" challenge type (Section 3) to validate that Node ID. If the ACME client attempts the authorization challenge to validate a Node ID, the ACME server sends an ACME Node ID Validation Challenge Bundle with a destination of the Node ID being validated. The BP Agent on that node receives the Challenge Bundle, generates an ACME Key Authorization digest, and sends an ACME Node ID Validation Response Bundle back in reply. An Integrity Gateway on the client side of the DTN can be used to attest to the source of the Response Bundle. Finally, the ACME server receives the Response Bundle and checks that the digest was generated for the associated ACME challenge and from the client account key associated with the original request. The whole workflow is shown in Figure 1 π¦
+------------+ +------------+
| ACME |<===== HTTPS Exchanges =====>| ACME |
| Client | | Server |
+------------+ +------------+
| | ^
(1) Enable or (6) Disable (2) Send | |
Validation from Server Challenge | |(5) Indicate
| Non-DTN | | Response
~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~|~~~~~~~~~~~~
V DTN V |
++------------++ ++------------++
|| Admin Elem.|| || Admin Elem.||-+
|+------------+| (3) Challenge |+------------+| |
| Client's |<------------- Bundle -----| Server's | |
| BP Agent | | BP Agent | |
+--------------+ +--------------+ |
| +----^---------+
| +-------------+ |
| | Integrity | (4) Response |
+---->| Gateway |------ Bundle --------+
+-------------+
Figure 1: The Relationships and Flows Between Node ID Validation
Entities
Here's the tea β Because the DTN Node ID is used both for routing Bundles between BP Agents and for multiplexing administrative services within a BP Agent, there's no way to separate the ACME validation of a Node ID from normal Bundle handling for that same Node ID. So administrative record types are the way to keep the Node ID unchanged while telling it apart from other service data Bundles. Iconic problem-solving, honestly π
Also, nothing in this protocol requires the ACME client or ACME server to be network-topologically co-located with their respective associated BP Agent πΈ ACME does need a low-enough latency network to do its HTTPS exchanges between the ACME client and server, but the client's BP Agent (the one being validated) could be on the far side of a long-delay or multi-hop BP network. How the ACME client or server talks to its associated BP Agent is an implementation matter, so that part's up to you π«Ά
1.3. Use of CDDL π§©
This document defines Concise Binary Object Representation (CBOR) structure using the Concise Data Definition Language (CDDL) [RFC8610]. You can extract the entire CDDL structure from the XML version of this document using the XPath expression '//sourcecode[@type="cddl"]' π
The following initial fragment defines the top-level symbols of this document's CDDL, which includes the example CBOR content:
start = acme-record / bundle / tstr
The definitions for the rule bundle and socket $admin-record are taken from Appendix B of [RFC9171] π
1.4. Terminology π
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. Capitals only, bestie, that's the rule π
Because this document combines two otherwise unrelated contexts, ACME and DTN, when a protocol term applies to one of those areas and is used in the other, its name gets prefixed with either "ACME" or "DTN" respectively. So within the ACME context the term is "DTN Node ID", while in the DTN context the name is just "Node ID". Main character naming energy π
In this document, several terms are shortened for the sake of brevity. Here they are:
Challenge Object: This is a shortened form of the full "DTN Node ID Challenge Object". It's a JSON object created by the ACME server for challenge type "bp-nodeid-00", as defined in Section 3.1.
Response Object: This is a shortened form of the full "DTN Node ID Response Object". It's a JSON object created by the ACME client to authorize a challenge type "bp-nodeid-00", as defined in Section 3.2.
Challenge Bundle: This is a shortened form of the full "ACME Node ID Validation Challenge Bundle". It's a Bundle created by the BP Agent managed by the ACME server to challenge a Node ID claim, as defined in Section 3.3.
Response Bundle: This is a shortened form of the full "ACME Node ID Validation Response Bundle". It's a Bundle created by the BP Agent managed by the ACME client to validate a Node ID claim, as defined in Section 3.4.
Because this is a document produced by the ACME WG, the following DTN BP terms are defined here to clarify how they're used by this ACME identifier type and validation mechanism π¦
Endpoint ID: An EID is an identifier for the ultimate destination of a Bundle, independent of any intermediate forwarding needed to reach that destination. An endpoint can be a singleton or not, so an EID can also represent a single entity or a set of entities. This is formally defined in Section 4.2.5.1 of [RFC9171].
Node ID: A Node ID is an identifier (that is not guaranteed to be unique) for a specific node in a network, in the form of a singleton EID. A single node can have any number of Node IDs, but a typical (and expected) form of Node ID is the Administrative EID (described below). This is formally defined in Section 4.2.5.2 of [RFC9171].
Administrative EID: An Administrative EID is unique for a node within a specific URI scheme. Although any Node ID can be a valid Bundle Source and Destination, the Administrative EID is a minimum required Node ID for any node operating in a particular URI scheme. For the "dtn" scheme, this is the empty demux part; for the "ipn" scheme, this is the service number zero. These are formally defined under Section 4.2.5.1 of [RFC9171] β¨
1.5. Experiment Scope π§ͺ
The emergent properties of DTN naming and BP security are still being developed and explored, especially between different organizational and administrative domains. So the Experimental status of this document is more about the practical usefulness of this kind of Node ID validation than the validation method itself π€ The original use case is large or cross-organizational networks where a BP Node can be trusted to be allocated and added to a network, but the method of certificate validation and issuance is wanted to happen in-band on the network, rather than being configured solely through a side channel using bespoke or manual protocols. Because this mechanism is so similar to other validation methods, specifically email address validation [RFC8823], it's expected to have few implementation difficulties or interoperability issues. Easy mode, lowkey π
Part of the experimental nature of the validation method defined in Section 3, and of BP more generally, is understanding its vulnerability to different kinds of on-path attacks. Some attacks could be based on the topology of the BP overlay network, while others could be based on the underlying (IP) network topology. Because not all of the attack surfaces of this validation method are known or fully understood, the usefulness of the multi-perspective technique described in Section 3.5 isn't assured either. The point of those multi-perspective requirements is that both the ACME client and server have consistent logic for handling the technique π«£
The attack surface stuff is serious, bestie. Don't skip it, and don't treat the experiment as finished.
The usefulness of the integrity gateway defined in Section 4 to this validation method is experimental, because the way that naming authority in a DTN is allocated, delegated, or enforced is not a settled matter π How the organization running the CA (and its ACME server) can delegate some level of trust to a different organization running a connected DTN with a security gateway is also not defined. The organization running the integrity gateway would need to apply some minimal amount of policy to nodes running behind it, such as patterns to their Node IDs. That would behave conceptually similar to delegation of subdomains in the Domain Name System (DNS), but without the online interaction of DNS π
A successful experiment of this validation method would involve using the ACME protocol along with this Node ID validation to allow issuing of identity certificates across administrative domains. One possible scenario: an issuing CA and an ACME server sit on the edge of a BP transit network operated by some agency. This transit network is used by edge nodes and accessed via edge routers of a peer network operated by a second agency. The nodes of the peer network are trusted by the second agency but not the first. The transit network can refuse to route traffic from the peer network that isn't traceable to a valid identity certificate, which the edge nodes can obtain via the ACME server. That's giving gatekeeper vibes πͺβ¨
A valuable result from any experiment, even an unsuccessful one, would be feedback about this method to improve later versions. That feedback could include improvements to object or message structure, random versus deterministic token values, client or server procedures, or naming more generally. Every outcome teaches us something, and that's so iconic π
2. Bundle EID ACME Identifier β¨
okay bestie, this spec is the first one to use a Bundle EID to identify a claim for a certificate request in ACME π¦ In this document, the only thing a Bundle EID ACME identifier gets validated for is as a DTN Node ID (see Section 3). Other specs can totally define challenge types for other EID uses later, though π
Every ACME identifier type "bundleEID" SHALL have a value containing a text URI that meets the requirements of Section 4.2.5.1 of [RFC9171]. It has to use one of the schemes listed in the "Bundle Protocol URI Scheme Types" registry [IANA-BP] π Any identifier type "bundleEID" value that fails to percent-decode properly SHALL be rejected with an ACME error type of "malformed" π
An ACME server that supports identifier type "bundleEID" SHALL decode and normalize (based on the scheme-specific syntax) every one of these identifier values it receives π§ Any identifier type "bundleEID" value whose scheme-specific part doesn't match the scheme-specific syntax SHALL be rejected with an ACME error type of "malformed". And if a value uses a scheme the ACME server doesn't handle, it SHALL be rejected with an ACME error type of "rejectedIdentifier" π
When an ACME server needs proof that a client controls a Bundle EID, it SHALL create an authorization with the identifier type "bundleEID". An ACME server SHALL NOT attempt to dereference a Bundle EID value on its own π«Ά It's the job of an ACME validation method to make sure the EID is actually owned, using a method the ACME client has authorized.
An identifier for the Node ID of "dtn://example/" would be formatted as:
{
"type": "bundleEID",
"value": "dtn://example/"
}
2.1. Subsets of Bundle EID πΈ
okay so a PKIX certificate SAN identity with an Other Name form of BundleEID can hold any EID value (as a text URI). But the certificate profile that the TCP CL uses in Section 4.4 of [RFC9174], and that the ACME validation method in Section 3 supports, requires the value to hold a Node ID (Section 1.4) π
On top of narrowing that certificate profile, this validation method requires that the client's BP Agent respond to administrative records sent to the Node ID being validated. Usually that means an Administrative EID (Section 1.4) destination. The administrative element of a BP Node isn't banned from receiving administrative records for other Node IDs, or from sending records from them, as long as it's helping this validation method β¨
Neither that certificate profile nor this validation method supports non-singleton EIDs. Other validation methods could be defined to do that, though, to support other certificate profiles π¦
3. DTN Node ID Validation π
the DTN Node ID validation method proves control over a Node ID by having the ACME client configure a BP Agent to respond to specific Challenge Bundles sent from the ACME server π The ACME server confirms control of the Node ID by checking that the Response Bundles it receives match the BP Node and client account key being validated π₯
This is kind of like the ACME email-address validation in [RFC8823] π§ The challenge splits the token into several parts, and each part travels through a different channel. The Key Authorization result needs all the parts combined. There's also a separate challenge identifier that BP Agents use as a filter, similar to the challenge "from" in Section 3 of [RFC8823]. Main character energy π§
The token parts go like this:
token-chal: This token is unique to each ACME authorization. It's in the Challenge Object from Section 3.1. Each authorization can have multiple Challenge Bundles (say, taking different routes), but they all share the sametoken-chalvalue. That keeps the Key Authorization tied to this specific ACME challenge and its parent ACME authorization π This token never shows up on the BP channel, so an eavesdropper who knows the client's account key thumbprint (from some other validation method, for example) still can't impersonate the client πtoken-bundle: This token is unique to each Challenge Bundle the ACME server sends. It's in the Challenge Bundle from Section 3.3 and the Response Bundle from Section 3.4. This makes sure the Key Authorization is tied to actually being able to receive the Challenge Bundle, not just having access to the ACME Challenge Object π¦ Heads up though: DTN on-path eavesdroppers can see this token too π
Since one Node ID can get several Challenge Bundles for the same validation, the token-bundle in the response is what lets the server match it up with the expected Key Authorization digest π§©
The DTN Node ID Challenge Object SHALL only be allowed for an EID that's usable as a DTN Node ID, which is defined per scheme in Section 4.2.5.1 of [RFC9171] π When an ACME server supports Node ID validation, it SHALL provide a Challenge Object following Section 3.1. Once that Challenge Object exists, the ACME client can start the validation β¨
To kick off a Node ID validation, the ACME client does the following:
- The ACME client POSTs a newOrder or newAuthz request that includes the identifier type "bundleEID" for the Node ID it wants. From either of those entry points, the ACME server indicates an authorization for the identifier type "bundleEID". See Section 7.4 of [RFC8555] for more details π¨
- The ACME client gets the
id-chalandtoken-chalfrom the Challenge Object (Section 3.1) inside an authorization object tied to the order, following Section 7.1.4 of [RFC8555] π - The ACME client tells the administrative element of its BP Agent which
id-chalis authorized for use, plus the matchingtoken-chaland client account key thumbprint. If it needs to, the ACME client waits until the Agent is configured before moving on π«Ά - The ACME client POSTs a Response Object (Section 3.2) to the challenge URL on the ACME server, following Section 7.5.1 of [RFC8555]. The payload object is built according to Section 3.2 π
- The administrative element waits for a Challenge Bundle with the authorized ACME parameters, including its
id-chalpayload, following Section 3.3 π - The administrative element joins
token-bundleandtoken-chal(each as a base64url-encoded text string) and computes the Key Authorization following Section 8.1 of [RFC8555], using the full token and client account key thumbprint π§ͺ - The administrative element picks the highest-priority hash algorithm that both the client and server support, uses it to compute the digest of the Key Authorization result, and generates a Response Bundle to send back to the ACME server following Section 3.4 π
- The ACME client waits for the authorization to be finalized on the ACME server, following Section 7.5.1 of [RFC8555] β³
- Once the challenge is completed (successfully or not), the ACME client tells the BP Agent that the
id-chalisn't usable anymore. If the authorization fails, the ACME client MAY retry the challenge from Step 3 π
The ACME server checks the client's control over a Node ID like this:
- The ACME server gets a newOrder or newAuthz request that includes the identifier type "bundleEID", where the URI value is a Node ID π₯
- The ACME server makes an authorization for the Node ID with challenge type "bp-nodeid-00", following Section 3.1 π§
- The ACME server gets a POST to the challenge URL listed in the authorization object. The payload gets handled according to Section 3.2 π¬
- Through the administrative element of its BP Agent, the ACME server sends one or more Challenge Bundles following Section 3.3. Each Challenge Bundle has a distinct, random
token-bundleso it can be matched with a Response Bundle later. Computing an expected Key Authorization digest isn't needed until a response comes back with a chosen hash algorithm π - The ACME server waits for Response Bundle(s) for a limited amount of time (based on the Response Object in Section 3.2). Responses are encoded following Section 3.4 β°
- Once they're received and decoded, the ACME server checks each Response Bundle's contents following Section 3.4.1. After every Challenge Bundle has been answered or timed out, the ACME server policy (see Section 3.5) decides whether the validation worked. If it didn't, a client may retry the challenge starting from Step 3 π₯²
When a BP Agent responds to a Challenge Bundle, it SHALL send a single Response Bundle following Section 3.4 π A BP Agent SHALL respond to ACME challenges only within the time interval and only for the id-chal the ACME client indicated π A BP Agent SHALL respond to multiple Challenge Bundles that have the same ACME parameters but different Bundle identities (source Node ID and timestamp). Those correspond to the ACME server validating over multiple routing paths πΊοΈ
3.1. DTN Node ID Challenge Object π§ββοΈ
the DTN Node ID Challenge Object is included by the ACME server as defined in Section 7.5 of [RFC8555] when it supports validating Node IDs π
The DTN Node ID Challenge Object has the following content:
type(required, string): The string "bp-nodeid-00".id-chal(required, string): This is a random value tied to a challenge that lets a client filter valid Challenge Bundles (Section 3.3). The same value gets used for all Challenge Bundles tied to an ACME challenge, including multi-perspective validation with multiple sources as described in Section 3.5. This value SHALL have at least 128 bits of entropy. It SHALL NOT contain any characters outside the base64url alphabet described in Section 5 of [RFC4648]. Trailing '=' padding characters SHALL be stripped. See BCP 106 [RFC4086] for more on randomness requirements π²token-chal(required, string): This is a random value used as part of the Key Authorization algorithm, and it's only communicated to the ACME client over the ACME channel π€« This value SHALL have at least 128 bits of entropy. It SHALL NOT contain any characters outside the base64url alphabet described in Section 5 of [RFC4648]. Trailing '=' padding characters SHALL be stripped. See BCP 106 [RFC4086] for more on randomness requirements π
Here's an example object:
{
"type": "bp-nodeid-00",
"url": "https://example.com/acme/chall/prV_B7yEyA4",
"id-chal": "dDtaviYTPUWFS3NK37YWfQ",
"token-chal": "tPUZNY4ONIk6LxErRFEjVw"
}
The token-chal value in this object applies to the entire challenge. It can match up with several different token-bundle values when multiple Challenge Bundles get sent for one validation β¨
3.2. DTN Node ID Response Object π
okay bestie, the DTN Node ID Response Object is what the ACME client sends when it says "yep, I approve this Node ID validation" π (see Section 7.5.1 of [RFC8555]). DTNs can have way longer delays than regular networks, but those delays are roughly predictable π«Ά, so the client can tell the ACME server when a validation round-trip is gonna take longer than the usual non-DTN delays (like, on the order of seconds) β¨.
Here's what's inside the object π:
rtt(optional, number) πΈ: the expected Round-Trip Time (RTT), in seconds, between sending a Challenge Bundle and receiving a Response Bundle. It's just a hint for how long to wait for replies, not an authoritative rule π. The minimum RTT value SHALL be zero. Zero doesn't mean anything extra special. It just means the response is expected in less than the tiniest unit the ACME client counts in.
Example, bestie π§:
{
"rtt": 300.0
}
A Response Object SHALL NOT be sent until the BP Agent has been set up to properly respond to the challenge π«. The RTT value is meant to show any node-specific path delays expected from the ACME server. There's no requirement on which path (or paths) Bundles may take between the ACME server and the BP Agent, and the ACME server can try some path diversity, so the RTT value SHOULD be pessimistic π¬.
A default Bundle response interval (for when the object has no RTT) SHOULD be a configurable parameter of the ACME server ποΈ. If the ACME client did send an RTT, the response interval SHOULD be twice the RTT, with the limiting logic described below applied π. The lower limit is network specific, but it SHOULD NOT be shorter than one second β±οΈ. The upper limit is also network specific, but it SHOULD NOT be longer than one minute (60 seconds) for a terrestrial-only DTN π.
3.3. ACME Node ID Validation Challenge Bundle π―
Each ACME Node ID Validation Challenge Bundle SHALL be structured and encoded in accordance with BPv7 [RFC9171] π¦.
Each Challenge Bundle has these parameters, listed here π:
- Bundle Processing Control Flags: the primary block flags SHALL indicate that the payload is an administrative record π. The primary block flags SHALL also indicate that user application acknowledgement is requested. That flag is what tells the Challenge Bundle apart from the Response Bundle π.
- Destination EID: the Destination EID SHALL be the ACME-server-normalized Node ID being validated π―.
- Source Node ID: the Source Node ID SHALL indicate the Node ID of a BP Agent of the ACME server doing the challenge π₯.
- Creation Timestamp and Lifetime: the Creation Timestamp SHALL be set to the time the challenge got generated β°. The Lifetime SHALL indicate the response interval (of Section 3.2) for which the ACME server will accept responses to this challenge.
- Administrative Record Type Code: this is set to the ACME Node ID Validation type code defined in Section 7.3 π·οΈ.
- Administrative Record Content: the Challenge Bundle administrative record content SHALL consist of a CBOR map containing the following three pairs ποΈ:
- One pair SHALL consist of key 1 with a value of ACME challenge
id-chal, copied from the Challenge Object, represented as a CBOR byte string. - One pair SHALL consist of key 2 with a value of ACME challenge
token-bundle, represented as a CBOR byte string. Thetoken-bundleis a random value that uniquely identifies the Challenge Bundle π. This value SHALL have at least 128 bits of entropy. See BCP 106 [RFC4086] for additional information on randomness requirements. - One pair SHALL consist of key 4 with a value of an array containing acceptable hash algorithm identifiers. The array SHALL be ordered in descending preference, with the first item being the most preferred. The array SHALL contain at least one item. Each algorithm identifier SHALL correspond to the Value column (integer or text string) of the algorithm registered in the "COSE Algorithms" registry [IANA-COSE] π§.
- One pair SHALL consist of key 1 with a value of ACME challenge
This structure is part of the extension CDDL in Appendix A. An example full Challenge Bundle is included in Appendix B.1 π.
For interoperability, entities that use this validation method SHALL support the hash algorithm "SHA-256" (value -16) [RFC9054] π€. This requirement allows different implementations to be configured to use an interoperable algorithm, but does not preclude the use of other algorithms with either higher or lower priority π.
If the BP Agent generating a Challenge Bundle does not have a well-synchronized clock, or the agent responding to the challenge is expected to not have a well-synchronized clock, the Bundle SHALL include a Bundle Age extension block in accordance with Section 4.4.2 of [RFC9171] β³.
Challenge Bundles SHALL include a Block Integrity Block (BIB) in accordance with Section 4 or with a Security Source identical to the Bundle Source Node π‘οΈ. Challenge Bundles SHALL NOT be directly encrypted by the Block Confidentiality Block (BCB) method or any other method (see Section 6.1) π ββοΈ.
3.3.1. Challenge Bundle Checks π
A proper Challenge Bundle meets all of the following criteria, no cap π―:
- The Challenge Bundle was received within the time interval allowed for the challenge. The allowed interval starts at the Creation Timestamp and extends for the Lifetime of the Challenge Bundle.
- The Challenge Bundle contains a BIB that covers at least the primary block and payload. That BIB has a Security Source that is trusted and passes security-context-specific validation (i.e., Message Authentication Code (MAC) or signature verification) π.
- The challenge payload contains the
id-chalas indicated in the ACME Challenge Object. - The challenge payload contains a
token-bundlematching the definition in Section 3.3. - The challenge payload contains at least one hash algorithm identifier acceptable to the client.
Failure to match any of the above SHALL cause the Challenge Bundle to be otherwise ignored by the BP Agent π. It is an implementation matter of how to react to such failures, which could include logging the event, incrementing counters, or raising alarms π¨.
3.4. ACME Node ID Validation Response Bundles π¨
Each ACME Node ID Validation Response Bundle SHALL be structured and encoded in accordance with BPv7 [RFC9171] π¦.
Each Response Bundle has these parameters, listed here π:
- Bundle Processing Control Flags: the primary block flags SHALL indicate that the payload is an administrative record π. The primary block flags SHALL NOT indicate that user application acknowledgement is requested. This flag is what distinguishes the Response Bundle from the Challenge Bundle π.
- Destination EID: the Destination EID SHALL be identical to the Source Node ID of the Challenge Bundle to which this response corresponds π―.
- Source Node ID: the Source Node ID SHALL be identical to the Destination EID of the Challenge Bundle to which this response corresponds π.
- Creation Timestamp and Lifetime: the Creation Timestamp SHALL be set to the time at which the response was generated β°. The response Lifetime SHALL indicate the response interval remaining if the Challenge Bundle indicated a limited Lifetime.
- Administrative Record Type Code: set to the ACME Node ID Validation type code defined in Section 7.3 π·οΈ.
- Administrative Record Content: the Response Bundle administrative record content SHALL consist of a CBOR map containing the following three pairs ποΈ:
- One pair SHALL consist of key 1 with value of ACME challenge
id-chal, copied from the Request Bundle, represented as a CBOR byte string. - One pair SHALL consist of key 2 with value of ACME challenge
token-bundle, copied from the Request Bundle, represented as a CBOR byte string. - One pair SHALL consist of key 3 with value of a two-element array containing the pair of a hash algorithm identifier and the hash byte string. The algorithm identifier SHALL correspond to the Value column (integer or text string) of the algorithm registered in the "COSE Algorithms" registry [IANA-COSE] π§.
- One pair SHALL consist of key 1 with value of ACME challenge
This structure is part of the extension CDDL in Appendix A. An example full Response Bundle is included in Appendix B.2 π.
If the BP Agent responding to a Challenge Bundle does not have a well-synchronized clock, it SHALL use any information about last-hop delays and (if present) Bundle Age extension data to infer the age of the Challenge Bundle and Lifetime of the Response Bundle π°οΈ.
Response Bundles SHALL include a BIB in accordance with Section 4 π‘οΈ. Response Bundles SHALL NOT be directly encrypted by BCB or any other method (see Section 6.1 for explanation) π ββοΈ.
3.4.1. Response Bundle Checks β
A proper Response Bundle meets all of the following criteria, periodt π :
- The Response Bundle was received within the time interval allowed for the challenge. The allowed interval starts at the Creation Timestamp and extends for the Lifetime of the associated Challenge Bundle. The interval of the Challenge Bundle is used here because the interval of the Response Bundle could be made to disagree with the Challenge Bundle β οΈ.
- The Response Bundle Source Node ID is identical to the Node ID being validated. The comparison of Node IDs SHALL use the comparison logic of the NODE-ID from Section 4.4.1 of [RFC9174] π€.
- The Response Bundle contains a BIB that covers at least the primary block and payload. That BIB has a Security Source that is trusted and passes security-context-specific validation π.
- The response payload contains the same
id-chalandtoken-bundleas sent in the Challenge Bundle (this is also how the two Bundles are correlated) π. - The response payload contains a hash algorithm identifier acceptable to the server (as indicated in the Challenge Bundle) π§.
- The response payload contains the expected Key Authorization digest computed by the ACME server π.
Any of the failures above SHALL cause that single-perspective validation to fail π. Any of the failures above SHOULD be distinguished as subproblems to the ACME client π§©. The lack of a response within the expected response interval, as defined in Section 3.2, SHALL also be treated as a validation failure β°π«.
3.5. Multi-Perspective Validation β¨
okay so some networks are kinda sketchy π and an on-path attacker could mess with a validation. to dodge that, an ACME server can run one validation but check it through multiple Challenge Bundle sources, or through multiple routing paths. this is called "multi-perspective validation" π¦. it's what [RFC8555] recommends in Section 10.2 of [RFC8555], and one implementation of it is used by Let's Encrypt in its operational deployment [LE-multi-perspective]. whether it's actually useful is part of this spec being experimental (see Section 1.5), so no promises yet π§ͺ
when policy says so, an ACME server SHALL send multiple Challenge Bundles from different sources in the BP network. when several Challenge Bundles get sent for one validation, it's up to the ACME server's policy to decide if the validation as a whole counts as a success π each single-source result is a success or failure, as defined in Section 3.4.1.
a RECOMMENDED validation policy is to succeed if the challenge from a primary Bundle source works out and there's no more than one failure from a secondary source πΈ which perspectives count as primary or secondary is an implementation matter, so that's up to you bestie.
whether it's single- or multi-perspective, a validation failure SHALL be indicated with the ACME error type incorrectResponse π and each specific perspective failure SHOULD be shown to the ACME client as a validation subproblem.
4. Bundle Integrity Gateway π‘οΈ
this section defines a BIB use that's lowkey a dead ringer for DKIM email signing [RFC6376] π§ here, a routing node in a DTN subnetwork vouches for where a Bundle came from by adding a BIB before forwarding it. so the Bundle receiver doesn't need to trust the original source at all, it only needs to trust this Security Source node π«Ά the receiver does need policy config to know which Security Sources are allowed to vouch for which Bundle sources. the utility of an integrity gateway is part of the experimental nature (Section 1.5) of this spec, so yep, same energy as before π§ͺ
an integrity gateway SHALL validate the Source Node ID of a Bundle, using local-network-specific means, before it adds a BIB to the Bundle π the exact method is network specific, but it could use physical-layer, network-layer, or BP-convergence-layer authentication. the Bundle source could also add its own BIB with a local-network-specific security context or local-network-specific key material (i.e., a group key shared within the local network) π
when an integrity gateway adds a BIB, it SHALL follow the BPSec [RFC9172] requirements π the BIB integrity SHALL cover both the payload block and the primary block, either directly as a target or as additional authenticated data for the payload block MAC/signature. and the Security Source of this BIB SHALL be either the Bundle source Node ID itself or a routing node trusted by the destination node (see Section 6.2) β¨
5. Certificate Request Profile π
the ultimate goal of this ACME validation is to let a CA issue certificates that follow the profiles of Section 4.4.2 of [RFC9174] and Section 4 of [BPSEC-COSE] π these are called "Bundle security certificates" and honestly they're giving main character energy.
the ACME identifier type bundleEID lines up with the PKIX certificate and certificate request "NODE-ID" from Section 4.4.1 of [RFC9174] π§ this NODE-ID shows up in certificate requests with an extensionRequest attribute (see [RFC2985]) that holds a SAN extension. the identities in it are of type otherName with an Other Name form of BundleEID, identified by id-on-bundleEID from the "SMI Security for PKIX Other Name Forms" registry [IANA-SMI]. the BundleEID Other Name form is encoded as an IA5String, so it SHALL be treated as being in the percent-encoded form of Section 2.1 of [RFC3986] π₯
one thing that really defines Bundle security certificates is the Extended Key Usage key purpose id-kp-bundleSecurity [IANA-SMI], as defined in Section 4.4.2.1 of [RFC9174] π when someone requests a certificate that includes a NODE-ID, the CSR SHOULD include an Extended Key Usage of id-kp-bundleSecurity. and when a Bundle security certificate gets issued based on a validated NODE-ID, the certificate SHALL include an Extended Key Usage of id-kp-bundleSecurity π
5.1. Multiple Identity Claims
hold up, this is a whole vibe π a single Bundle security CSR MAY contain a mixed set of SAN identifiers, including combos of IP-ID [RFC9525], DNS-ID [RFC9525], and NODE-ID [RFC9174] types. those map to the ACME identifier types ip, dns, and bundleEID, respectively.
there's no restriction on how a certificate combines these claims π€·ββοΈ but every identifier SHALL be validated by an ACME server before it can issue such a certificate as part of an associated ACME order. this is no different from how ACME already works [RFC8555], but it's mentioned here so CA policy can handle these situations, especially when one identifier out of several fails validation π the existing validation mechanisms are defined for identifier type ip [RFC8738] and dns [RFC8555], among others [IANA-ACME].
the specific TLS-based security use case for the TCP CL in Section 4.4 of [RFC9174] allows, and for some network policies requires, that a certificate authenticate both the DNS name of an entity and its Node ID π«Ά these authentications apply to each identifier type, which get used at different network layers and at different points during secure session establishment.
5.2. Generating Encryption-Only or Signing-Only Bundle Security Certificates
the ACME extensions in this document can be used to request encryption-only or signing-only Bundle security certificates π whether a restricted-use or unrestricted-use certificate is valid depends on both CA policy for issuing such certificates and constraints based on the requested key and algorithm types. it's a whole balancing act, bestie π
to request a signing-only Bundle security certificate, the CSR SHALL include the key usage extension with the digitalSignature and/or nonRepudiation bits set and no other bits set βοΈ
to request an encryption-only Bundle security certificate, the CSR SHALL include the key usage extension with the keyEncipherment or keyAgreement bits set and no other bits set π
if the CSR has both of the above sets of key usage bits, or if it has no key usage extension at all, that signals the ACME server to issue a Bundle security certificate that's good for both signing and encryption π
6. Security Considerations π¨
okay bestie, this part is SERIOUS, so get comfy π this section splits security considerations into threat categories, following the guidance of BCP 72 [RFC3552] π΅οΈββοΈ
6.1. Threat: Passive Leak of Validation Data
because this challenge mechanism is used to bootstrap security between DTN Nodes, the challenge and its response are likely to get sent in plaintext π the only ACME data on the wire is a random token and a cryptographic digest, so there's no sensitive data to leak during the Node ID Validation Bundle exchange. and since each challenge uses a separate token pair, there's zero value for an on-path attacker in seeing tokens from past challenges and/or responses π§
it's possible for intermediate BP Nodes to encapsulate-and-encrypt Challenge Bundles and/or Response Bundles while they cross untrusted networks, but that's a DTN configuration matter and it's outside the scope of this document π«§
6.2. Threat: BP Node Impersonation
as described in Section 10.1 of [RFC8555], an active attacker can alter data on both the ACME client channel and the DTN validation channel π
the main mitigation is to hand off Bundle integrity sourcing to a trusted routing node that's near the Bundle source node, near in the sense of Bundle routing topology, as defined in Section 4 π this is functionally similar to DKIM email signing [RFC6376] and it gives some level of secure Bundle origination.
another way to fight on-path attacks is to try validating the same Node ID from multiple sources, hopefully over multiple Bundle routing paths, as defined in Section 3.5 π¦ but guaranteeing Bundle routing isn't trivial, so more advanced techniques like onion routing (using Bundle-in-Bundle encapsulation) could be used.
6.3. Threat: Bundle Replay
it's possible for an on-path attacker to replay both Challenge Bundles and Response Bundles π even in a properly configured DTN, intermediate Bundle routers might use multi-path forwarding of a singleton-destination Bundle.
ultimately, the whole point of the ACME Bundle exchange is to derive a Key Authorization value and its cryptographic digest, then send that digest back to the ACME server for validation. so the uniqueness of the Key Authorization directly sets the scope of replay validity β¨ the uniqueness of each token-bundle makes the Key Authorization unique to the Challenge Bundle. and the uniqueness of each token-chal makes it unique to that ACME challenge, instead of being based only on values that on-path eavesdroppers can see π
having each Bundle's primary block and payload block covered by a BIB from a trusted Security Source (see Section 4) means a replayed Bundle can't be altered in the blocks ACME uses π put it all together and there's no degraded security from replaying a Challenge Bundle or a Response Bundle, even when the primary or payload block isn't covered by a BIB. the worst that can happen with Bundle replay is wasted network resources, as described in Section 6.4 ποΈ
6.4. Threat: Denial of Service
everything in this section adds up to a potential denial-of-service against a BP Agent π
a malicious entity can keep sending Challenge Bundles to a BP Agent π¨ the victim BP Agent can ignore Challenge Bundles that don't match the specific time interval and challenge token the ACME client told the BP Agent to expect. the victim BP Agent can also require all Challenge Bundles to be BIB-signed, to make sure the challenge is authentic π‘οΈ
a malicious entity can also keep sending Response Bundles to a BP Agent π¬ the victim BP Agent can ignore Response Bundles that don't match the specific time interval, Source Node ID, or challenge token for an active Node ID validation.
similar to other validation methods, an ACME server validating a DTN Node ID could get abused as a denial-of-service amplifier π for this reason, any ACME server can rate-limit validation activities for individual clients and individual certificate requests π¦
6.5. Inherited Security Considerations
this protocol leans on ACME for part of its operation, so the security considerations of ACME [RFC8555] apply to all ACME client-server exchanges during Node ID validation π§©
this protocol also leans on BPv7 for part of its operation, so the security considerations of BPv7 [RFC9171] and BPSec [RFC9172] apply to all BP messaging during Node ID validation πΈ
6.6. Out-of-Scope BP Agent Communication β¨
Okay so bestie, the messages going between an ACME client or ACME server and its BP Agent are technically out of scope for this doc π BUT they are still super critical to Node ID validation security, no cap. Either channel can leak data or become an attack vector if it isn't locked down properly π Both channels need to protect against spoofed messages going in either direction, otherwise validation sequencing gets interrupted and somebody could sneak in a false validation that succeeds ππ₯
The ACME server and its BP Agent swap the outgoing id-chal, the token-bundle, and the Key Authorization digest. Those values do not need to be confidential, bc they're already sent in plaintext over the BP channel anyway π«Ά
Now the tea π΅: depending on how an implementation is built, the ACME client might send its client account key thumbprint to its BP Agent so the BP Agent can compute the Key Authorization digest itself π§ If an ACME client does send its thumbprint over, it is important that this data stays confidential, because it's what binds the client account key to the Node ID validation (and to every other type of ACME validation too) π Skipping that transmission would mean a full round-trip between the BP Agent and the ACME client, which can be really annoying when the two are on a long-delay network π
7. IANA Considerations π
Okay so this spec adds stuff to two registry groups: the "Automated Certificate Management Environment (ACME) Protocol" registry group and the "Bundle Protocol" registry group π¦
7.1. ACME Identifier Types πΈ
Within the "Automated Certificate Management Environment (ACME) Protocol" registry group [IANA-ACME], one new entry got added to the "ACME Identifier Types" registry, and it looks like this:
+===========+===========+
| Label | Reference |
+===========+===========+
| bundleEID | RFC 9891 |
+-----------+-----------+
Table 1
7.2. ACME Validation Methods π
Within the same ACME registry group [IANA-ACME], the "ACME Validation Methods" registry picked up a new entry too π
+==============+=================+======+===========+
| Label | Identifier Type | ACME | Reference |
+==============+=================+======+===========+
| bp-nodeid-00 | bundleEID | Y | RFC 9891 |
+--------------+-----------------+------+-----------+
Table 2
7.3. Bundle Administrative Record Types π§
Within the "Bundle Protocol" registry group [IANA-BP], the "Bundle Administrative Record Types" registry got a new entry, and yes it's giving main character energy β¨
+=========================+=======+==============+===========+
| Bundle Protocol Version | Value | Description | Reference |
+=========================+=======+==============+===========+
| 7 | 255 | ACME Node ID | RFC 9891 |
| | | Validation | |
+-------------------------+-------+--------------+-----------+
Table 3
8. References π
8.1. Normative References π
These are the must-read ones, bestie π«Ά
- [IANA-ACME] IANA, "Automated Certificate Management Environment (ACME) Protocol",
<https://www.iana.org/assignments/acme/>. - [IANA-BP] IANA, "Bundle Protocol",
<https://www.iana.org/assignments/bundle/>. - [IANA-COSE] IANA, "CBOR Object Signing and Encryption (COSE)",
<https://www.iana.org/assignments/cose/>. - [IANA-SMI] IANA, "Structure of Management Information (SMI) Numbers (MIB Module Registrations)",
<https://www.iana.org/assignments/smi-numbers/>. - [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>. - [RFC2985] Nystrom, M. and B. Kaliski, "PKCS #9: Selected Object Classes and Attribute Types Version 2.0", RFC 2985, DOI 10.17487/RFC2985, November 2000,
<https://www.rfc-editor.org/info/rfc2985>. - [RFC3552] Rescorla, E. and B. Korver, "Guidelines for Writing RFC Text on Security Considerations", BCP 72, RFC 3552, DOI 10.17487/RFC3552, July 2003,
<https://www.rfc-editor.org/info/rfc3552>. - [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", STD 66, RFC 3986, DOI 10.17487/RFC3986, January 2005,
<https://www.rfc-editor.org/info/rfc3986>. - [RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker, "Randomness Requirements for Security", BCP 106, RFC 4086, DOI 10.17487/RFC4086, June 2005,
<https://www.rfc-editor.org/info/rfc4086>. - [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006,
<https://www.rfc-editor.org/info/rfc4648>. - [RFC4838] Cerf, V., Burleigh, S., Hooke, A., Torgerson, L., Durst, R., Scott, K., Fall, K., and H. Weiss, "Delay-Tolerant Networking Architecture", RFC 4838, DOI 10.17487/RFC4838, April 2007,
<https://www.rfc-editor.org/info/rfc4838>. - [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>. - [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>. - [RFC8555] Barnes, R., Hoffman-Andrews, J., McCarney, D., and J. Kasten, "Automatic Certificate Management Environment (ACME)", RFC 8555, DOI 10.17487/RFC8555, March 2019,
<https://www.rfc-editor.org/info/rfc8555>. - [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>. - [RFC9054] Schaad, J., "CBOR Object Signing and Encryption (COSE): Hash Algorithms", RFC 9054, DOI 10.17487/RFC9054, August 2022,
<https://www.rfc-editor.org/info/rfc9054>. - [RFC9171] Burleigh, S., Fall, K., and E. Birrane, III, "Bundle Protocol Version 7", RFC 9171, DOI 10.17487/RFC9171, January 2022,
<https://www.rfc-editor.org/info/rfc9171>. - [RFC9172] Birrane, III, E. and K. McKeever, "Bundle Protocol Security (BPSec)", RFC 9172, DOI 10.17487/RFC9172, January 2022,
<https://www.rfc-editor.org/info/rfc9172>. - [RFC9174] Sipos, B., Demmer, M., Ott, J., and S. Perreault, "Delay-Tolerant Networking TCP Convergence-Layer Protocol Version 4", RFC 9174, DOI 10.17487/RFC9174, January 2022,
<https://www.rfc-editor.org/info/rfc9174>. - [RFC9525] Saint-Andre, P. and R. Salz, "Service Identity in TLS", RFC 9525, DOI 10.17487/RFC9525, November 2023,
<https://www.rfc-editor.org/info/rfc9525>.
8.2. Informative References π¦
Extra reading if you're curious, no pressure π
- [BPSEC-COSE] Sipos, B., "Bundle Protocol Security (BPSec) COSE Context", Work in Progress, Internet-Draft, draft-ietf-dtn-bpsec-cose-12, 12 November 2025,
<https://datatracker.ietf.org/doc/html/draft-ietf-dtn-bpsec-cose-12>. - [LE-multi-perspective] Aas, J., McCarney, D., and R. Shoemaker, "Multi-Perspective Validation Improves Domain Validation Security", 19 February 2020,
<https://letsencrypt.org/2020/02/19/multi-perspective-validation.html>. - [RFC6376] Crocker, D., Ed., Hansen, T., Ed., and M. Kucherawy, Ed., "DomainKeys Identified Mail (DKIM) Signatures", STD 76, RFC 6376, DOI 10.17487/RFC6376, September 2011,
<https://www.rfc-editor.org/info/rfc6376>. - [RFC8738] Shoemaker, R.B., "Automated Certificate Management Environment (ACME) IP Identifier Validation Extension", RFC 8738, DOI 10.17487/RFC8738, February 2020,
<https://www.rfc-editor.org/info/rfc8738>. - [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, "Handling Long Lines in Content of Internet-Drafts and RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020,
<https://www.rfc-editor.org/info/rfc8792>. - [RFC8823] Melnikov, A., "Extensions to Automatic Certificate Management Environment for End-User S/MIME Certificates", RFC 8823, DOI 10.17487/RFC8823, April 2021,
<https://www.rfc-editor.org/info/rfc8823>.
Appendix A. Administrative Record Types CDDL π§Ύ
The extension of BPv7 from Appendix B of [RFC9171] for the ACME Bundles in Sections 3.3 and 3.4 is the following CDDL, and it's kinda iconic π
; All ACME records have the same structure
$admin-record /= [0xFF, acme-record]
acme-record = acme-challenge-record / acme-response-record
acme-challenge-record = {
id-chal,
token-bundle,
alg-list
}
acme-response-record = {
id-chal,
token-bundle,
key-auth-digest
}
id-chal = (1: bstr)
token-bundle = (2: bstr)
key-auth-digest = (3: [
alg: alg-id,
value: bstr
])
alg-list = (4: [+ alg-id])
; From the IANA COSE registry, only hash algorithms allowed
alg-id = tstr / int
Appendix B. Example Authorization π·
This example is a Bundle exchange for the ACME server with Node ID dtn://acme-server/ performing a verification for ACME client Node ID dtn://acme-client/. The example Bundles use no block CRC or BPSec integrity, which is for simplicity and is not recommended for normal use π The provided figures are extended diagnostic notation [RFC8610].
For this example, the ACME client key thumbprint has the base64url-encoded value of:
"LPJNul-wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ"
and the ACME-server generated token-chal has the base64url-encoded value of:
"tPUZNY4ONIk6LxErRFEjVw"
B.1. Challenge Bundle
okay so this is the example Challenge Bundle π The token-bundle (carried as a byte string over BP) has the base64url-encoded value of:
p3yRYFU4KxwQaHQjJ2RdiQ β¨
Here's the minimal-but-valid Challenge Bundle, Figure 2 π It's giving a 60-second window: the ACME client has to respond in that time π
[_
[
7, / BP version /
0x22, / flags: user-app-ack, payload-is-an-admin-record /
0, / CRC type: none /
[1, "//acme-client/"], / destination /
[1, "//acme-server/"], / source /
[1, 0], / report-to: none /
[1000000, 0], / timestamp: 2000-01-01T00:16:40+00:00 /
60000 / lifetime: 60s /
],
[
1, / block type code /
1, / block number /
0, / flags /
0, / CRC type: none /
<<[ / type-specific data /
0xFF, / record-type-code /
{ / record-content /
1: b64'dDtaviYTPUWFS3NK37YWfQ', / id-chal /
2: b64'p3yRYFU4KxwQaHQjJ2RdiQ', / token-bundle /
4: [-16] / alg-list: SHA-256 /
}
]>>
]
]
Figure 2: Example Challenge Bundle π¦
B.2. Response Bundle
okay bestie, this part is so satisfying π₯Ή When the tokens get mixed with the key thumbprint, you get the full Key Authorization value. It's folded across lines so it's easier to read, using the "single backslash" strategy from Section 7 of [RFC8792] π
/ NOTE: '\' line wrapping per RFC 8792 /
"p3yRYFU4KxwQaHQjJ2RdiQtPUZNY4ONIk6LxErRFEjVw.\
LPJNul-wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ"
And here's the minimal-but-valid Response Bundle, Figure 3 πΈ This one tells the client there are 30 seconds left in the response time window β³
[_
[
7, / BP version /
0x02, / flags: payload-is-an-admin-record /
0, / CRC type: none /
[1, "//acme-server/"], / destination /
[1, "//acme-client/"], / source /
[1, 0], / report-to: none /
[1030000, 0], / timestamp: 2000-01-01T00:17:10+00:00 /
30000 / lifetime: 30s /
],
[
1, / block type code /
1, / block number /
0, / flags /
0, / CRC type: none /
<<[ / block-type-specific data /
0xFF, / record-type-code /
{ / record-content /
1: b64'dDtaviYTPUWFS3NK37YWfQ', / id-chal /
2: b64'p3yRYFU4KxwQaHQjJ2RdiQ', / token-bundle /
3: [-16, b64'mVIOJEQZie8XpYM6MMVSQUiNPH64URnhM9niJ5XHrew']
/ SHA-256 key auth. digest /
}
]>>
]
]
Figure 3: Example Response Bundle π¦
Acknowledgements β¨
this spec is built on DTN use cases for PKIX certificate issuance, so shoutout to everyone who brought those to the table π
The workflow and terminology of this validation method were originally copied from the work of Alexey Melnikov for email validation [RFC8823]. Thank you, Alexey, you're iconic ππ
Author's Address π
Brian Sipos
RKF Engineering Solutions, LLC
7500 Old Georgetown Road
Suite 1275
Bethesda, MD 20814-6198
United States of America
Email: brian.sipos+ietf@gmail.com
π¦ where this page comes from
- ietf: rfc9891 2025-11
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms