summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9646.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc9646.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc9646.txt')
-rw-r--r--doc/rfc/rfc9646.txt1612
1 files changed, 1612 insertions, 0 deletions
diff --git a/doc/rfc/rfc9646.txt b/doc/rfc/rfc9646.txt
new file mode 100644
index 0000000..4274309
--- /dev/null
+++ b/doc/rfc/rfc9646.txt
@@ -0,0 +1,1612 @@
+
+
+
+
+Internet Engineering Task Force (IETF) K. Watsen
+Request for Comments: 9646 Watsen Networks
+Updates: 8572 R. Housley
+Category: Standards Track Vigil Security
+ISSN: 2070-1721 S. Turner
+ sn3rd
+ October 2024
+
+
+ Conveying a Certificate Signing Request (CSR) in a Secure Zero-Touch
+ Provisioning (SZTP) Bootstrapping Request
+
+Abstract
+
+ This document extends the input to the "get-bootstrapping-data" RPC
+ defined in RFC 8572 to include an optional certificate signing
+ request (CSR), enabling a bootstrapping device to additionally obtain
+ an identity certificate (e.g., a Local Device Identifier (LDevID)
+ from IEEE 802.1AR) as part of the "onboarding information" response
+ provided in the RPC-reply.
+
+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. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9646.
+
+Copyright Notice
+
+ Copyright (c) 2024 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, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Revised BSD License text as described in Section 4.e of the
+ Trust Legal Provisions and are provided without warranty as described
+ in the Revised BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 1.1. Overview
+ 1.2. Terminology
+ 1.3. Requirements Language
+ 1.4. Conventions
+ 2. The "ietf-sztp-csr" Module
+ 2.1. Data Model Overview
+ 2.2. Example Usage
+ 2.3. YANG Module
+ 3. The "ietf-ztp-types" Module
+ 3.1. Data Model Overview
+ 3.2. YANG Module
+ 4. Security Considerations
+ 4.1. SZTP-Client Considerations
+ 4.1.1. Ensuring the Integrity of Asymmetric Private Keys
+ 4.1.2. Reuse of a Manufacturer-Generated Private Key
+ 4.1.3. Replay Attack Protection
+ 4.1.4. Connecting to an Untrusted Bootstrap Server
+ 4.1.5. Selecting the Best Origin Authentication Mechanism
+ 4.1.6. Clearing the Private Key and Associated Certificate
+ 4.2. SZTP-Server Considerations
+ 4.2.1. Verifying Proof-of-Possession
+ 4.2.2. Verifying Proof-of-Origin
+ 4.2.3. Supporting SZTP-Clients That Don't Trust the
+ SZTP-Server
+ 4.3. Security Considerations for the "ietf-sztp-csr" YANG Module
+ 4.4. Security Considerations for the "ietf-ztp-types" YANG
+ Module
+ 5. IANA Considerations
+ 5.1. The IETF XML Registry
+ 5.2. The YANG Module Names Registry
+ 6. References
+ 6.1. Normative References
+ 6.2. Informative References
+ Acknowledgements
+ Contributors
+ Authors' Addresses
+
+1. Introduction
+
+1.1. Overview
+
+ This document extends the input to the "get-bootstrapping-data" RPC
+ defined in [RFC8572] to include an optional certificate signing
+ request (CSR) [RFC2986], enabling a bootstrapping device to
+ additionally obtain an identity certificate (e.g., an LDevID from
+ [Std-802.1AR-2018]) as part of the "onboarding information" response
+ provided in the RPC-reply.
+
+ The ability to provision an identity certificate that is purpose-
+ built for a production environment during the bootstrapping process
+ removes reliance on the manufacturer Certification Authority (CA),
+ and it also enables the bootstrapped device to join the production
+ environment with an appropriate identity and other attributes in its
+ identity certificate (e.g., an LDevID).
+
+ Two YANG [RFC7950] modules are defined. The "ietf-ztp-types" module
+ defines three YANG groupings for the various messages defined in this
+ document. The "ietf-sztp-csr" module augments two groupings into the
+ "get-bootstrapping-data" RPC and defines a YANG data structure
+ [RFC8791] around the third grouping.
+
+1.2. Terminology
+
+ This document uses the following terms from [RFC8572]:
+
+ * Bootstrap Server
+ * Bootstrapping Data
+ * Conveyed Information
+ * Device
+ * Manufacturer
+ * Onboarding Information
+ * Signed Data
+
+ This document defines the following new terms:
+
+ SZTP-client: The term "SZTP-client" refers to a "device" that is
+ using a "bootstrap server" as a source of "bootstrapping data".
+
+ SZTP-server: The term "SZTP-server" is an alternative term for
+ "bootstrap server" that is symmetric with the "SZTP-client" term.
+
+1.3. Requirements Language
+
+ 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.
+
+1.4. Conventions
+
+ Various examples in this document use "BASE64VALUE=" as a placeholder
+ value for binary data that has been base64 encoded (per Section 9.8
+ of [RFC7950]). This placeholder value is used because real
+ base64-encoded structures are often many lines long and hence
+ distracting to the example being presented.
+
+ Various examples in this document contain long lines that may be
+ folded, as described in [RFC8792].
+
+2. The "ietf-sztp-csr" Module
+
+ The "ietf-sztp-csr" module is a YANG 1.1 [RFC7950] module that
+ augments the "ietf-sztp-bootstrap-server" module defined in [RFC8572]
+ and defines a YANG "structure" that is to be conveyed in the "error-
+ info" node defined in Section 7.1 of [RFC8040].
+
+2.1. Data Model Overview
+
+ The following tree diagram [RFC8340] illustrates the "ietf-sztp-csr"
+ module.
+
+ module: ietf-sztp-csr
+
+ augment /sztp-svr:get-bootstrapping-data/sztp-svr:input:
+ +---w (msg-type)?
+ +--:(csr-support)
+ | +---w csr-support
+ | +---w key-generation!
+ | | +---w supported-algorithms
+ | | +---w algorithm-identifier* binary
+ | +---w csr-generation
+ | +---w supported-formats
+ | +---w format-identifier* identityref
+ +--:(csr)
+ +---w (csr-type)
+ +--:(p10-csr)
+ | +---w p10-csr? ct:csr
+ +--:(cmc-csr)
+ | +---w cmc-csr? binary
+ +--:(cmp-csr)
+ +---w cmp-csr? binary
+
+ structure csr-request:
+ +-- key-generation!
+ | +-- selected-algorithm
+ | +-- algorithm-identifier binary
+ +-- csr-generation
+ | +-- selected-format
+ | +-- format-identifier identityref
+ +-- cert-req-info? ct:csr-info
+
+ The augmentation defines two kinds of parameters that an SZTP-client
+ can send to an SZTP-server. The YANG structure defines one
+ collection of parameters that an SZTP-server can send to an SZTP-
+ client.
+
+ In the order of their intended use:
+
+ 1. The SZTP-client sends a "csr-support" node, encoded in a first
+ "get-bootstrapping-data" request to the SZTP-server, to indicate
+ that it supports the ability to generate CSRs. This input
+ parameter conveys if the SZTP-client is able to generate a new
+ asymmetric key and, if so, which key algorithms it supports, as
+ well as what kinds of CSR structures the SZTP-client is able to
+ generate.
+
+ 2. The SZTP-server responds with an error, containing the "csr-
+ request" structure, to request the SZTP-client to generate a CSR.
+ This structure is used to select the key algorithm the SZTP-
+ client should use to generate a new asymmetric key (if
+ supported), the kind of CSR structure the SZTP-client should
+ generate, and optionally the content for the CSR itself.
+
+ 3. The SZTP-client sends one of the "*-csr" nodes, encoded in a
+ second "get-bootstrapping-data" request to the SZTP-server. This
+ node encodes the server-requested CSR.
+
+ 4. The SZTP-server responds with onboarding information to
+ communicate the signed certificate to the SZTP-client. How to do
+ this is discussed in Section 2.2.
+
+ To further illustrate how the augmentation and structure defined by
+ the "ietf-sztp-csr" module are used, below are two additional tree
+ diagrams showing these nodes placed where they are used.
+
+ The following tree diagram [RFC8340] illustrates SZTP's "get-
+ bootstrapping-data" RPC with the augmentation in place.
+
+ =============== NOTE: '\' line wrapping per RFC 8792 ================
+
+ module: ietf-sztp-bootstrap-server
+
+ rpcs:
+ +---x get-bootstrapping-data
+ +---w input
+ | +---w signed-data-preferred? empty
+ | +---w hw-model? string
+ | +---w os-name? string
+ | +---w os-version? string
+ | +---w nonce? binary
+ | +---w (sztp-csr:msg-type)?
+ | +--:(sztp-csr:csr-support)
+ | | +---w sztp-csr:csr-support
+ | | +---w sztp-csr:key-generation!
+ | | | +---w sztp-csr:supported-algorithms
+ | | | +---w sztp-csr:algorithm-identifier* bina\
+ ry
+ | | +---w sztp-csr:csr-generation
+ | | +---w sztp-csr:supported-formats
+ | | +---w sztp-csr:format-identifier* identit\
+ yref
+ | +--:(sztp-csr:csr)
+ | +---w (sztp-csr:csr-type)
+ | +--:(sztp-csr:p10-csr)
+ | | +---w sztp-csr:p10-csr? ct:csr
+ | +--:(sztp-csr:cmc-csr)
+ | | +---w sztp-csr:cmc-csr? binary
+ | +--:(sztp-csr:cmp-csr)
+ | +---w sztp-csr:cmp-csr? binary
+ +--ro output
+ +--ro reporting-level? enumeration {onboarding-server}?
+ +--ro conveyed-information cms
+ +--ro owner-certificate? cms
+ +--ro ownership-voucher? cms
+
+ The following tree diagram [RFC8340] illustrates RESTCONF's "errors"
+ RPC-reply message with the "csr-request" structure in place.
+
+ module: ietf-restconf
+ +--ro errors
+ +--ro error* []
+ +--ro error-type enumeration
+ +--ro error-tag string
+ +--ro error-app-tag? string
+ +--ro error-path? instance-identifier
+ +--ro error-message? string
+ +--ro error-info
+ +--ro sztp-csr:csr-request
+ +--ro sztp-csr:key-generation!
+ | +--ro sztp-csr:selected-algorithm
+ | +--ro sztp-csr:algorithm-identifier binary
+ +--ro sztp-csr:csr-generation
+ | +--ro sztp-csr:selected-format
+ | +--ro sztp-csr:format-identifier identityref
+ +--ro sztp-csr:cert-req-info? ct:csr-info
+
+2.2. Example Usage
+
+ | NOTE: The examples below are encoded using JSON, but they could
+ | equally well be encoded using XML, as is supported by SZTP.
+
+ An SZTP-client implementing this specification would signal to the
+ bootstrap server its willingness to generate a CSR by including the
+ "csr-support" node in its "get-bootstrapping-data" RPC. In the
+ example below, the SZTP-client additionally indicates that it is able
+ to generate keys and provides a list of key algorithms it supports,
+ as well as provide a list of certificate formats it supports.
+
+ REQUEST
+
+ =============== NOTE: '\' line wrapping per RFC 8792 ================
+
+ POST /restconf/operations/ietf-sztp-bootstrap-server:get-bootstrappi\
+ ng-data HTTP/1.1
+ HOST: example.com
+ Content-Type: application/yang-data+json
+
+ {
+ "ietf-sztp-bootstrap-server:input" : {
+ "hw-model": "model-x",
+ "os-name": "vendor-os",
+ "os-version": "17.3R2.1",
+ "nonce": "extralongbase64encodedvalue=",
+ "ietf-sztp-csr:csr-support": {
+ "key-generation": {
+ "supported-algorithms": {
+ "algorithm-identifier": [
+ "BASE64VALUE1",
+ "BASE64VALUE2",
+ "BASE64VALUE3"
+ ]
+ }
+ },
+ "csr-generation": {
+ "supported-formats": {
+ "format-identifier": [
+ "ietf-ztp-types:p10-csr",
+ "ietf-ztp-types:cmc-csr",
+ "ietf-ztp-types:cmp-csr"
+ ]
+ }
+ }
+ }
+ }
+ }
+
+ Assuming the SZTP-server wishes to prompt the SZTP-client to provide
+ a CSR, then it would respond with an HTTP 400 Bad Request error code.
+ In the example below, the SZTP-server specifies that it wishes the
+ SZTP-client to generate a key using a specific algorithm and generate
+ a PKCS#10-based CSR containing specific content.
+
+ RESPONSE
+
+ HTTP/1.1 400 Bad Request
+ Date: Sat, 31 Oct 2021 17:02:40 GMT
+ Server: example-server
+ Content-Type: application/yang-data+json
+
+ {
+ "ietf-restconf:errors" : {
+ "error" : [
+ {
+ "error-type": "application",
+ "error-tag": "missing-attribute",
+ "error-message": "Missing input parameter",
+ "error-info": {
+ "ietf-sztp-csr:csr-request": {
+ "key-generation": {
+ "selected-algorithm": {
+ "algorithm-identifier": "BASE64VALUE="
+ }
+ },
+ "csr-generation": {
+ "selected-format": {
+ "format-identifier": "ietf-ztp-types:p10-csr"
+ }
+ },
+ "cert-req-info": "BASE64VALUE="
+ }
+ }
+ }
+ ]
+ }
+ }
+
+ Upon being prompted to provide a CSR, the SZTP-client would POST
+ another "get-bootstrapping-data" request but this time including one
+ of the "csr" nodes to convey its CSR to the SZTP-server:
+
+ REQUEST
+
+ =============== NOTE: '\' line wrapping per RFC 8792 ================
+
+ POST /restconf/operations/ietf-sztp-bootstrap-server:get-bootstrappi\
+ ng-data HTTP/1.1
+ HOST: example.com
+ Content-Type: application/yang-data+json
+
+ {
+ "ietf-sztp-bootstrap-server:input" : {
+ "hw-model": "model-x",
+ "os-name": "vendor-os",
+ "os-version": "17.3R2.1",
+ "nonce": "extralongbase64encodedvalue=",
+ "ietf-sztp-csr:p10-csr": "BASE64VALUE="
+ }
+ }
+
+ At this point, it is expected that the SZTP-server, perhaps in
+ conjunction with other systems, such as a backend CA or registration
+ authority (RA), will validate the CSR's origin and proof-of-
+ possession and, assuming the CSR is approved, issue a signed
+ certificate for the bootstrapping device.
+
+ The SZTP-server responds with conveyed information (the "conveyed-
+ information" node shown below) that encodes "onboarding-information"
+ (inside the base64 value) containing a signed identity certificate
+ for the CSR provided by the SZTP-client:
+
+ RESPONSE
+
+ HTTP/1.1 200 OK
+ Date: Sat, 31 Oct 2021 17:02:40 GMT
+ Server: example-server
+ Content-Type: application/yang-data+json
+
+ {
+ "ietf-sztp-bootstrap-server:output" : {
+ "reporting-level": "verbose",
+ "conveyed-information": "BASE64VALUE="
+ }
+ }
+
+ How the signed certificate is conveyed inside the onboarding
+ information is outside the scope of this document. Some
+ implementations may choose to convey it inside a script (e.g., SZTP's
+ "pre-configuration-script"), while other implementations may choose
+ to convey it inside the SZTP "configuration" node. SZTP onboarding
+ information is described in Section 2.2 of [RFC8572].
+
+ Below are two examples of conveying the signed certificate inside the
+ "configuration" node. Both examples assume that the SZTP-client
+ understands the "ietf-keystore" module defined in [RFC9642].
+
+ This first example illustrates the case where the signed certificate
+ is for the same asymmetric key used by the SZTP-client's
+ manufacturer-generated identity certificate (e.g., an Initial Device
+ Identifier (IDevID) from [Std-802.1AR-2018]). As such, the
+ configuration needs to associate the newly signed certificate with
+ the existing asymmetric key:
+
+ =============== NOTE: '\' line wrapping per RFC 8792 ================
+
+ {
+ "ietf-keystore:keystore": {
+ "asymmetric-keys": {
+ "asymmetric-key": [
+ {
+ "name": "Manufacturer-Generated Hidden Key",
+ "public-key-format": "ietf-crypto-types:subject-public-key\
+ -info-format",
+ "public-key": "BASE64VALUE=",
+ "hidden-private-key": [null],
+ "certificates": {
+ "certificate": [
+ {
+ "name": "Manufacturer-Generated IDevID Cert",
+ "cert-data": "BASE64VALUE="
+ },
+ {
+ "name": "Newly-Generated LDevID Cert",
+ "cert-data": "BASE64VALUE="
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+
+ This second example illustrates the case where the signed certificate
+ is for a newly generated asymmetric key. As such, the configuration
+ needs to associate the newly signed certificate with the newly
+ generated asymmetric key:
+
+ =============== NOTE: '\' line wrapping per RFC 8792 ================
+
+ {
+ "ietf-keystore:keystore": {
+ "asymmetric-keys": {
+ "asymmetric-key": [
+ {
+ "name": "Manufacturer-Generated Hidden Key",
+ "public-key-format": "ietf-crypto-types:subject-public-key\
+ -info-format",
+ "public-key": "BASE64VALUE=",
+ "hidden-private-key": [null],
+ "certificates": {
+ "certificate": [
+ {
+ "name": "Manufacturer-Generated IDevID Cert",
+ "cert-data": "BASE64VALUE="
+ }
+ ]
+ }
+ },
+ {
+ "name": "Newly-Generated Hidden Key",
+ "public-key-format": "ietf-crypto-types:subject-public-key\
+ -info-format",
+ "public-key": "BASE64VALUE=",
+ "hidden-private-key": [null],
+ "certificates": {
+ "certificate": [
+ {
+ "name": "Newly-Generated LDevID Cert",
+ "cert-data": "BASE64VALUE="
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+
+ In addition to configuring the signed certificate, it is often
+ necessary to also configure the issuer's signing certificate so that
+ the device (i.e., STZP-client) can authenticate certificates
+ presented by peer devices signed by the same issuer as its own.
+ While outside the scope of this document, one way to do this would be
+ to use the "ietf-truststore" module defined in [RFC9641].
+
+2.3. YANG Module
+
+ This module augments an RPC defined in [RFC8572]. The module uses
+ data types and groupings defined in [RFC8572], [RFC8791], and
+ [RFC9640]. The module also has an informative reference to
+ [Std-802.1AR-2018].
+
+ <CODE BEGINS> file "ietf-sztp-csr@2024-10-10.yang"
+ module ietf-sztp-csr {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-sztp-csr";
+ prefix sztp-csr;
+
+ import ietf-sztp-bootstrap-server {
+ prefix sztp-svr;
+ reference
+ "RFC 8572: Secure Zero Touch Provisioning (SZTP)";
+ }
+
+ import ietf-yang-structure-ext {
+ prefix sx;
+ reference
+ "RFC 8791: YANG Data Structure Extensions";
+ }
+
+ import ietf-ztp-types {
+ prefix zt;
+ reference
+ "RFC 9646: Conveying a Certificate Signing Request (CSR)
+ in a Secure Zero-Touch Provisioning (SZTP)
+ Bootstrapping Request";
+ }
+
+ organization
+ "IETF NETCONF (Network Configuration) Working Group";
+
+ contact
+ "WG Web: https://datatracker.ietf.org/wg/netconf
+ WG List: NETCONF WG list <mailto:netconf@ietf.org>
+ Authors: Kent Watsen <mailto:kent+ietf@watsen.net>
+ Russ Housley <mailto:housley@vigilsec.com>
+ Sean Turner <mailto:sean@sn3rd.com>";
+
+ description
+ "This module augments the 'get-bootstrapping-data' RPC,
+ defined in the 'ietf-sztp-bootstrap-server' module from
+ SZTP (RFC 8572), enabling the SZTP-client to obtain a
+ signed identity certificate (e.g., an LDevID from IEEE
+ 802.1AR) as part of the SZTP onboarding information
+ response.
+
+ 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
+ (RFC 2119) (RFC 8174) when, and only when, they appear
+ in all capitals, as shown here.
+
+ Copyright (c) 2024 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Revised BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 9646
+ (https://www.rfc-editor.org/info/rfc9646); see the
+ RFC itself for full legal notices.";
+
+ revision 2024-10-10 {
+ description
+ "Initial version.";
+ reference
+ "RFC 9646: Conveying a Certificate Signing Request (CSR)
+ in a Secure Zero-Touch Provisioning (SZTP)
+ Bootstrapping Request";
+ }
+
+ // Protocol-accessible nodes
+
+ augment "/sztp-svr:get-bootstrapping-data/sztp-svr:input" {
+ description
+ "This augmentation adds the 'csr-support' and 'csr' nodes to
+ the SZTP (RFC 8572) 'get-bootstrapping-data' request message,
+ enabling the SZTP-client to obtain an identity certificate
+ (e.g., an LDevID from IEEE 802.1AR) as part of the onboarding
+ information response provided by the SZTP-server.
+
+ The 'csr-support' node enables the SZTP-client to indicate
+ that it supports generating certificate signing requests
+ (CSRs) and to provide details around the CSRs it is able
+ to generate.
+
+ The 'csr' node enables the SZTP-client to relay a CSR to
+ the SZTP-server.";
+ reference
+ "IEEE 802.1AR: IEEE Standard for Local and Metropolitan
+ Area Networks - Secure Device Identity
+ RFC 8572: Secure Zero Touch Provisioning (SZTP)";
+ choice msg-type {
+ description
+ "Messages are mutually exclusive.";
+ case csr-support {
+ description
+ "Indicates how the SZTP-client supports generating CSRs.
+
+ If present and a SZTP-server wishes to request the
+ SZTP-client generate a CSR, the SZTP-server MUST
+ respond with an HTTP 400 Bad Request error code with an
+ 'ietf-restconf:errors' message having the 'error-tag'
+ value 'missing-attribute' and the 'error-info' node
+ containing the 'csr-request' structure described
+ in this module.";
+ uses zt:csr-support-grouping;
+ }
+ case csr {
+ description
+ "Provides the CSR generated by the SZTP-client.
+
+ When present, the SZTP-server SHOULD respond with
+ an SZTP onboarding information message containing
+ a signed certificate for the conveyed CSR. The
+ SZTP-server MAY alternatively respond with another
+ HTTP error containing another 'csr-request'; in
+ which case, the SZTP-client MUST delete any key
+ generated for the previously generated CSR.";
+ uses zt:csr-grouping;
+ }
+ }
+ }
+
+ sx:structure csr-request {
+ description
+ "A YANG data structure, per RFC 8791, that specifies
+ details for the CSR that the ZTP-client is to generate.";
+ reference
+ "RFC 8791: YANG Data Structure Extensions";
+ uses zt:csr-request-grouping;
+ }
+
+ }
+ <CODE ENDS>
+
+3. The "ietf-ztp-types" Module
+
+ This section defines a YANG 1.1 [RFC7950] module that defines three
+ YANG groupings, one for each message sent between a ZTP-client and
+ ZTP-server. This module is defined independently of the "ietf-sztp-
+ csr" module so that its groupings may be used by bootstrapping
+ protocols other than SZTP [RFC8572].
+
+3.1. Data Model Overview
+
+ The following tree diagram [RFC8340] illustrates the three groupings
+ defined in the "ietf-ztp-types" module.
+
+ module: ietf-ztp-types
+
+ grouping csr-support-grouping
+ +-- csr-support
+ +-- key-generation!
+ | +-- supported-algorithms
+ | +-- algorithm-identifier* binary
+ +-- csr-generation
+ +-- supported-formats
+ +-- format-identifier* identityref
+ grouping csr-request-grouping
+ +-- key-generation!
+ | +-- selected-algorithm
+ | +-- algorithm-identifier binary
+ +-- csr-generation
+ | +-- selected-format
+ | +-- format-identifier identityref
+ +-- cert-req-info? ct:csr-info
+ grouping csr-grouping
+ +-- (csr-type)
+ +--:(p10-csr)
+ | +-- p10-csr? ct:csr
+ +--:(cmc-csr)
+ | +-- cmc-csr? binary
+ +--:(cmp-csr)
+ +-- cmp-csr? binary
+
+3.2. YANG Module
+
+ This module uses data types and groupings defined in [RFC8791] and
+ [RFC9640]. The module has additional normative references to
+ [RFC2986], [RFC4210], [RFC5272], and [ITU.X690.2021] and an
+ informative reference to [Std-802.1AR-2018].
+
+ <CODE BEGINS> file "ietf-ztp-types@2024-10-10.yang"
+ module ietf-ztp-types {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-ztp-types";
+ prefix zt;
+
+ import ietf-crypto-types {
+ prefix ct;
+ reference
+ "RFC 9640: YANG Data Types and Groupings for Cryptography";
+ }
+
+ organization
+ "IETF NETCONF (Network Configuration) Working Group";
+
+ contact
+ "WG Web: https://datatracker.ietf.org/wg/netconf
+ WG List: NETCONF WG list <mailto:netconf@ietf.org>
+ Authors: Kent Watsen <mailto:kent+ietf@watsen.net>
+ Russ Housley <mailto:housley@vigilsec.com>
+ Sean Turner <mailto:sean@sn3rd.com>";
+
+ description
+ "This module defines three groupings that enable
+ bootstrapping devices to 1) indicate if and how they
+ support generating CSRs, 2) obtain a request to
+ generate a CSR, and 3) communicate the requested CSR.
+
+ 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
+ (RFC 2119) (RFC 8174) when, and only when, they appear
+ in all capitals, as shown here.
+
+ Copyright (c) 2024 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Revised BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 9646
+ (https://www.rfc-editor.org/info/rfc9646); see the
+ RFC itself for full legal notices.";
+
+ revision 2024-10-10 {
+ description
+ "Initial version.";
+ reference
+ "RFC 9646: Conveying a Certificate Signing Request (CSR)
+ in a Secure Zero-Touch Provisioning (SZTP)
+ Bootstrapping Request";
+ }
+
+ identity certificate-request-format {
+ description
+ "A base identity for the request formats supported
+ by the ZTP-client.
+
+ Additional derived identities MAY be defined by
+ future efforts.";
+ }
+
+ identity p10-csr {
+ base certificate-request-format;
+ description
+ "Indicates that the ZTP-client supports generating
+ requests using the 'CertificationRequest' structure
+ defined in RFC 2986.";
+ reference
+ "RFC 2986: PKCS #10: Certification Request Syntax
+ Specification Version 1.7";
+ }
+
+ identity cmp-csr {
+ base certificate-request-format;
+ description
+ "Indicates that the ZTP-client supports generating
+ requests using a profiled version of the PKIMessage
+ that MUST contain a PKIHeader followed by a PKIBody
+ containing only the ir, cr, kur, or p10cr structures
+ defined in RFC 4210.";
+ reference
+ "RFC 4210: Internet X.509 Public Key Infrastructure
+ Certificate Management Protocol (CMP)";
+ }
+
+ identity cmc-csr {
+ base certificate-request-format;
+ description
+ "Indicates that the ZTP-client supports generating
+ requests using a profiled version of the 'Full
+ PKI Request' structure defined in RFC 5272.";
+ reference
+ "RFC 5272: Certificate Management over CMS (CMC)";
+ }
+
+ // Protocol-accessible nodes
+
+ grouping csr-support-grouping {
+ description
+ "A grouping enabling use by other efforts.";
+ container csr-support {
+ description
+ "Enables a ZTP-client to indicate that it supports
+ generating certificate signing requests (CSRs) and
+ provides details about the CSRs it is able to
+ generate.";
+ container key-generation {
+ presence "Indicates that the ZTP-client is capable of
+ generating a new asymmetric key pair.
+
+ If this node is not present, the ZTP-server MAY
+ request a CSR using the asymmetric key associated
+ with the device's existing identity certificate
+ (e.g., an IDevID from IEEE 802.1AR).";
+ description
+ "Specifies details for the ZTP-client's ability to
+ generate a new asymmetric key pair.";
+ container supported-algorithms {
+ description
+ "A list of public key algorithms supported by the
+ ZTP-client for generating a new asymmetric key.";
+ leaf-list algorithm-identifier {
+ type binary;
+ min-elements 1;
+ description
+ "An AlgorithmIdentifier, as defined in RFC 2986,
+ encoded using ASN.1 Distinguished Encoding Rules
+ (DER), as specified in ITU-T X.690.";
+ reference
+ "RFC 2986: PKCS #10: Certification Request Syntax
+ Specification Version 1.7
+ ITU-T X.690:
+ Information technology - ASN.1 encoding rules:
+ Specification of Basic Encoding Rules (BER),
+ Canonical Encoding Rules (CER) and Distinguished
+ Encoding Rules (DER)";
+ }
+ }
+ }
+ container csr-generation {
+ description
+ "Specifies details for the ZTP-client's ability to
+ generate certificate signing requests.";
+ container supported-formats {
+ description
+ "A list of certificate request formats supported
+ by the ZTP-client for generating a new key.";
+ leaf-list format-identifier {
+ type identityref {
+ base zt:certificate-request-format;
+ }
+ min-elements 1;
+ description
+ "A certificate request format supported by the
+ ZTP-client.";
+ }
+ }
+ }
+ }
+ }
+
+ grouping csr-request-grouping {
+ description
+ "A grouping enabling use by other efforts.";
+ container key-generation {
+ presence "Provided by a ZTP-server to indicate that it wishes
+ the ZTP-client to generate a new asymmetric key.
+
+ This statement is present so the mandatory
+ descendant nodes do not imply that this node must
+ be configured.";
+ description
+ "The key generation parameters selected by the ZTP-server.
+
+ This leaf MUST only appear if the ZTP-client's
+ 'csr-support' included the 'key-generation' node.";
+ container selected-algorithm {
+ description
+ "The key algorithm selected by the ZTP-server. The
+ algorithm MUST be one of the algorithms specified by
+ the 'supported-algorithms' node in the ZTP-client's
+ message containing the 'csr-support' structure.";
+ leaf algorithm-identifier {
+ type binary;
+ mandatory true;
+ description
+ "An AlgorithmIdentifier, as defined in RFC 2986,
+ encoded using ASN.1 Distinguished Encoding Rules
+ (DER), as specified in ITU-T X.690.";
+ reference
+ "RFC 2986: PKCS #10: Certification Request Syntax
+ Specification Version 1.7
+ ITU-T X.690:
+ Information technology - ASN.1 encoding rules:
+ Specification of Basic Encoding Rules (BER),
+ Canonical Encoding Rules (CER) and Distinguished
+ Encoding Rules (DER)";
+ }
+ }
+ }
+ container csr-generation {
+ description
+ "Specifies details for the CSR that the ZTP-client
+ is to generate.";
+ container selected-format {
+ description
+ "The CSR format selected by the ZTP-server. The
+ format MUST be one of the formats specified by
+ the 'supported-formats' node in the ZTP-client's
+ request message.";
+ leaf format-identifier {
+ type identityref {
+ base zt:certificate-request-format;
+ }
+ mandatory true;
+ description
+ "A certificate request format to be used by the
+ ZTP-client.";
+ }
+ }
+ }
+ leaf cert-req-info {
+ type ct:csr-info;
+ description
+ "A CertificationRequestInfo structure, as defined in
+ RFC 2986, and modeled via a 'typedef' statement by
+ RFC 9640.
+
+ Enables the ZTP-server to provide a fully populated
+ CertificationRequestInfo structure that the ZTP-client
+ only needs to sign in order to generate the complete
+ 'CertificationRequest' structure to send to the ZTP-server
+ in its next 'get-bootstrapping-data' request message.
+
+ When provided, the ZTP-client MUST use this structure
+ to generate its CSR; failure to do so will result in a
+ 400 Bad Request response containing another 'csr-request'
+ structure.
+
+ When not provided, the ZTP-client SHOULD generate a CSR
+ using the same structure defined in its existing identity
+ certificate (e.g., an IDevID from IEEE 802.1AR).
+
+ If the 'AlgorithmIdentifier' field contained inside the
+ certificate 'SubjectPublicKeyInfo' field does not match
+ the algorithm identified by the 'selected-algorithm' node,
+ then the client MUST reject the certificate and raise an
+ error.";
+
+ reference
+ "RFC 2986:
+ PKCS #10: Certification Request Syntax Specification
+ Version 1.7
+ RFC 9640:
+ YANG Data Types and Groupings for Cryptography";
+ }
+ }
+
+ grouping csr-grouping {
+ description
+ "Enables a ZTP-client to convey a certificate signing
+ request, using the encoding format selected by a
+ ZTP-server's 'csr-request' response to the ZTP-client's
+ previously sent request containing the 'csr-support'
+ node.";
+ choice csr-type {
+ mandatory true;
+ description
+ "A choice amongst certificate signing request formats.
+
+ Additional formats MAY be augmented into this 'choice'
+ statement by future efforts.";
+ case p10-csr {
+ leaf p10-csr {
+ type ct:p10-csr;
+ description
+ "A CertificationRequest structure, per RFC 2986.
+ Encoding details are defined in the 'ct:csr'
+ typedef defined in RFC 9640.
+
+ A raw P10 does not support origin authentication in
+ the CSR structure. External origin authentication
+ may be provided via the ZTP-client's authentication
+ to the ZTP-server at the transport layer (e.g., TLS).";
+ reference
+ "RFC 2986: PKCS #10: Certification Request Syntax
+ Specification Version 1.7
+ RFC 9640: YANG Data Types and Groupings for
+ Cryptography";
+ }
+ }
+ case cmc-csr {
+ leaf cmc-csr {
+ type binary;
+ description
+ "A profiled version of the 'Full PKI Request'
+ message defined in RFC 5272, encoded using ASN.1
+ Distinguished Encoding Rules (DER), as specified
+ in ITU-T X.690.
+
+ For asymmetric-key-based origin authentication of a
+ CSR based on the initial device identity certificate's
+ private key for the associated identity certificate's
+ public key, the PKIData contains one reqSequence
+ element and no cmsSequence or otherMsgSequence
+ elements. The reqSequence is the TaggedRequest,
+ and it is the tcr CHOICE branch. The tcr is the
+ TaggedCertificationRequest, and it is the bodyPartID
+ and the certificateRequest elements. The
+ certificateRequest is signed with the initial device
+ identity certificate's private key. The initial device
+ identity certificate, and optionally its certificate
+ chain is included in the SignedData certificates that
+ encapsulate the PKIData.
+
+ For asymmetric-key-based origin authentication based on
+ the initial device identity certificate's private key
+ that signs the encapsulated CSR signed by the local
+ device identity certificate's private key, the
+ PKIData contains one cmsSequence element and no
+ reqSequence or otherMsgSequence
+ elements. The cmsSequence is the TaggedContentInfo,
+ and it includes a bodyPartID element and a contentInfo.
+ The contentInfo is a SignedData encapsulating a PKIData
+ with one reqSequence element and no cmsSequence or
+ otherMsgSequence elements. The reqSequence is the
+ TaggedRequest, and it is the tcr CHOICE. The tcr is the
+ TaggedCertificationRequest, and it is the bodyPartID and
+ the certificateRequest elements. PKIData contains one
+ cmsSequence element and no controlSequence, reqSequence,
+ or otherMsgSequence elements. The certificateRequest
+ is signed with the local device identity certificate's
+ private key. The initial device identity certificate
+ and optionally its certificate chain is included in
+ the SignedData certificates that encapsulate the
+ PKIData.
+
+ For shared-secret-based origin authentication of a
+ CSR signed by the local device identity certificate's
+ private key, the PKIData contains one cmsSequence
+ element and no reqSequence or otherMsgSequence
+ elements. The cmsSequence is the TaggedContentInfo,
+ and it includes a bodyPartID element and a contentInfo.
+ The contentInfo is an AuthenticatedData encapsulating
+ a PKIData with one reqSequence element and no
+ cmsSequences or otherMsgSequence elements. The
+ reqSequence is the TaggedRequest, and it is the tcr
+ CHOICE. The tcr is the TaggedCertificationRequest,
+ and it is the bodyPartID and the certificateRequest
+ elements. The certificateRequest is signed with the
+ local device identity certificate's private key. The
+ initial device identity certificate and optionally its
+ certificate chain is included in the SignedData
+ certificates that encapsulate the PKIData.";
+ reference
+ "RFC 5272: Certificate Management over CMS (CMC)
+ ITU-T X.690:
+ Information technology - ASN.1 encoding rules:
+ Specification of Basic Encoding Rules (BER),
+ Canonical Encoding Rules (CER) and Distinguished
+ Encoding Rules (DER)";
+ }
+ }
+ case cmp-csr {
+ leaf cmp-csr {
+ type binary;
+ description
+ "A PKIMessage structure, as defined in RFC 4210,
+ encoded using ASN.1 Distinguished Encoding Rules
+ (DER), as specified in ITU-T X.690.
+
+ For asymmetric-key-based origin authentication of a
+ CSR based on the initial device identity certificate's
+ private key for the associated initial device identity
+ certificate's public key, PKIMessages contain one
+ PKIMessage with the header and body elements, do not
+ contain a protection element, and SHOULD contain the
+ extraCerts element. The header element contains the
+ pvno, sender, and recipient elements. The pvno contains
+ cmp2000, and the sender contains the subject of the
+ initial device identity certificate. The body element
+ contains an ir, cr, kur, or p10cr CHOICE of type
+ CertificationRequest. It is signed with the initial
+ device identity certificate's private key. The
+ extraCerts element contains the initial device identity
+ certificate, optionally followed by its certificate
+ chain excluding the trust anchor.
+
+ For asymmetric-key-based origin authentication based
+ on the initial device identity certificate's private
+ key that signs the encapsulated CSR signed by the local
+ device identity certificate's private key, PKIMessages
+ contain one PKIMessage with the header, body, and
+ protection elements and SHOULD contain the extraCerts
+ element. The header element contains the pvno, sender,
+ recipient, protectionAlg, and optionally senderKID
+ elements. The pvno contains cmp2000, the sender
+ contains the subject of the initial device identity
+ certificate, the protectionAlg contains the
+ AlgorithmIdentifier of the used signature algorithm,
+ and the senderKID contains the subject key identifier
+ of the initial device identity certificate. The body
+ element contains an ir, cr, kur, or p10cr CHOICE of
+ type CertificationRequest. It is signed with the local
+ device identity certificate's private key. The
+ protection element contains the digital signature
+ generated with the initial device identity
+ certificate's private key. The extraCerts element
+ contains the initial device identity certificate,
+ optionally followed by its certificate chain excluding
+ the trust anchor.
+
+ For shared-secret-based origin authentication of a
+ CSR signed by the local device identity certificate's
+ private key, PKIMessages contain one PKIMessage with
+ the header, body, and protection element and no
+ extraCerts element. The header element contains the
+ pvno, sender, recipient, protectionAlg, and senderKID
+ elements. The pvno contains cmp2000, the protectionAlg
+ contains the AlgorithmIdentifier of the used Message
+ Authentication Code (MAC) algorithm, and the senderKID
+ contains a reference the recipient can use to identify
+ the shared secret. The body element contains an ir, cr,
+ kur, or p10cr CHOICE of type CertificationRequest. It
+ is signed with the local device identity certificate's
+ private key. The protection element contains the MAC
+ value generated with the shared secret.";
+ reference
+ "RFC 4210:
+ Internet X.509 Public Key Infrastructure
+ Certificate Management Protocol (CMP)
+ ITU-T X.690:
+ Information technology - ASN.1 encoding rules:
+ Specification of Basic Encoding Rules (BER),
+ Canonical Encoding Rules (CER) and Distinguished
+ Encoding Rules (DER)";
+ }
+ }
+ }
+ }
+
+ }
+ <CODE ENDS>
+
+4. Security Considerations
+
+ This document builds on top of the solution presented in [RFC8572],
+ and therefore all the security considerations discussed in [RFC8572]
+ apply here as well.
+
+ For the various CSR formats, when using PKCS#10, the security
+ considerations in [RFC2986] apply; when using CMP, the security
+ considerations in [RFC4210] apply; and when using CMC, the security
+ considerations in [RFC5272] apply.
+
+ For the various authentication mechanisms, when using TLS-level
+ authentication, the security considerations in [RFC8446] apply, and
+ when using HTTP-level authentication, the security considerations in
+ [RFC9110] apply.
+
+4.1. SZTP-Client Considerations
+
+4.1.1. Ensuring the Integrity of Asymmetric Private Keys
+
+ The private key the SZTP-client uses for the dynamically generated
+ identity certificate MUST be protected from inadvertent disclosure in
+ order to prevent identity fraud.
+
+ The security of this private key is essential in order to ensure the
+ associated identity certificate can be used to authenticate the
+ device it is issued to.
+
+ It is RECOMMENDED that devices are manufactured with a hardware
+ security module (HSM), such as a trusted platform module (TPM), to
+ generate and contain the private key within the security perimeter of
+ the HSM. In such cases, the private key and its associated
+ certificates MAY have long validity periods.
+
+ In cases where the SZTP-client does not possess an HSM or is unable
+ to use an HSM to protect the private key, it is RECOMMENDED to
+ periodically reset the private key (and associated identity
+ certificates) in order to minimize the lifetime of unprotected
+ private keys. For instance, a Network Management System (NMS)
+ controller/orchestrator application could periodically prompt the
+ SZTP-client to generate a new private key and provide a certificate
+ signing request (CSR) or, alternatively, push both the key and an
+ identity certificate to the SZTP-client using, e.g., a PKCS#12
+ message [RFC7292]. In another example, the SZTP-client could be
+ configured to periodically reset the configuration to its factory
+ default, thus causing removal of the private key and associated
+ identity certificates and re-execution of the SZTP protocol.
+
+4.1.2. Reuse of a Manufacturer-Generated Private Key
+
+ It is RECOMMENDED that a new private key is generated for each CSR
+ described in this document.
+
+ Implementations must randomly generate nonces and private keys. The
+ use of inadequate pseudorandom number generators (PRNGs) to generate
+ cryptographic keys can result in little or no security. An attacker
+ may find it much easier to reproduce the PRNG environment that
+ produced the keys, searching the resulting small set of
+ possibilities, rather than brute force searching the whole key space.
+ As an example of predictable random numbers, see CVE-2008-0166
+ [CVE-2008-0166], and some consequences of low-entropy random numbers
+ are discussed in "Mining Your Ps and Qs" [MiningPsQs]. The
+ generation of quality random numbers is difficult. [ISO.20543-2019],
+ [NIST.SP.800-90Ar1], BSI AIS 31 [AIS31], BCP 106 [RFC4086], and
+ others offer valuable guidance in this area.
+
+ This private key SHOULD be protected as well as the built-in private
+ key associated with the SZTP-client's initial device identity
+ certificate (e.g., the IDevID from [Std-802.1AR-2018]).
+
+ In cases where it is not possible to generate a new private key that
+ is protected as well as the built-in private key, it is RECOMMENDED
+ to reuse the built-in private key rather than generate a new private
+ key that is not as well protected.
+
+4.1.3. Replay Attack Protection
+
+ This RFC enables an SZTP-client to announce an ability to generate a
+ new key to use for its CSR.
+
+ When the SZTP-server responds with a request for the SZTP-client to
+ generate a new key, it is essential that the SZTP-client actually
+ generates a new key.
+
+ Generating a new key each time enables the random bytes used to
+ create the key to also serve the dual-purpose of acting like a
+ "nonce" used in other mechanisms to detect replay attacks.
+
+ When a fresh public/private key pair is generated for the request,
+ confirmation to the SZTP-client that the response has not been
+ replayed is enabled by the SZTP-client's fresh public key appearing
+ in the signed certificate provided by the SZTP-server.
+
+ When a public/private key pair associated with the manufacturer-
+ generated identity certificate (e.g., IDevID) is used for the
+ request, there may not be confirmation to the SZTP-client that the
+ response has not been replayed; however, the worst case result is a
+ lost certificate that is associated to the private key known only to
+ the SZTP-client. Protection of the private-key information is vital
+ to public-key cryptography. Disclosure of the private-key material
+ to another entity can lead to masquerades.
+
+4.1.4. Connecting to an Untrusted Bootstrap Server
+
+ [RFC8572] allows SZTP-clients to connect to untrusted SZTP-servers by
+ blindly authenticating the SZTP-server's TLS end-entity certificate.
+
+ As is discussed in Section 9.5 of [RFC8572], in such cases, the SZTP-
+ client MUST assert that the bootstrapping data returned is signed if
+ the SZTP-client is to trust it.
+
+ However, the HTTP error message used in this document cannot be
+ signed data, as described in [RFC8572].
+
+ Therefore, the solution presented in this document cannot be used
+ when the SZTP-client connects to an untrusted SZTP-server.
+
+ Consistent with the recommendation presented in Section 9.6 of
+ [RFC8572], SZTP-clients SHOULD NOT pass the "csr-support" input
+ parameter to an untrusted SZTP-server. SZTP-clients SHOULD instead
+ pass the "signed-data-preferred" input parameter, as discussed in
+ Appendix B of [RFC8572].
+
+4.1.5. Selecting the Best Origin Authentication Mechanism
+
+ The origin of the CSR must be verified before a certificate is
+ issued.
+
+ When generating a new key, it is important that the SZTP-client be
+ able to provide additional proof that it was the entity that
+ generated the key.
+
+ The CMP and CMC certificate request formats defined in this document
+ support origin authentication. A raw PKCS#10 CSR does not support
+ origin authentication.
+
+ The CMP and CMC request formats support origin authentication using
+ both PKI and a shared secret.
+
+ Typically, only one possible origin authentication mechanism can
+ possibly be used, but in the case that the SZTP-client authenticates
+ itself using both TLS-level (e.g., IDevID) and HTTP-level credentials
+ (e.g., Basic), as is allowed by Section 5.3 of [RFC8572], then the
+ SZTP-client may need to choose between the two options.
+
+ In the case that the SZTP-client must choose between an asymmetric
+ key option versus a shared secret for origin authentication, it is
+ RECOMMENDED that the SZTP-client choose using the asymmetric key.
+
+4.1.6. Clearing the Private Key and Associated Certificate
+
+ Unlike a manufacturer-generated identity certificate (e.g., IDevID),
+ the deployment-generated identity certificate (e.g., LDevID) and the
+ associated private key (assuming a new private key was generated for
+ the purpose) are considered user data and SHOULD be cleared whenever
+ the SZTP-client is reset to its factory default state, such as by the
+ "factory-reset" RPC defined in [RFC8808].
+
+4.2. SZTP-Server Considerations
+
+4.2.1. Verifying Proof-of-Possession
+
+ Regardless, if using a new asymmetric key or the bootstrapping
+ device's manufacturer-generated key (e.g., the IDevID key), the
+ public key is placed in the CSR and the CSR is signed by that private
+ key. Proof-of-possession of the private key is verified by ensuring
+ the signature over the CSR using the public key placed in the CSR.
+
+4.2.2. Verifying Proof-of-Origin
+
+ When the bootstrapping device's manufacturer-generated private key
+ (e.g., the IDevID key) is reused for the CSR, proof-of-origin is
+ verified by validating the IDevID-issuer cert and ensuring that the
+ CSR uses the same key pair.
+
+ When the bootstrapping device's manufacturer-generated private key
+ (e.g., an IDevID key from IEEE 802.1AR) is reused for the CSR, proof-
+ of-origin is verified by validating the IDevID certification path and
+ ensuring that the CSR uses the same key pair.
+
+ When a fresh asymmetric key is used with the CMP or CMC formats, the
+ authentication is part of the protocols, which could employ either
+ the manufacturer-generated private key or a shared secret. In
+ addition, CMP and CMC support processing by an RA before the request
+ is passed to the CA, which allows for more robust handling of errors.
+
+4.2.3. Supporting SZTP-Clients That Don't Trust the SZTP-Server
+
+ [RFC8572] allows SZTP-clients to connect to untrusted SZTP-servers by
+ blindly authenticating the SZTP-server's TLS end-entity certificate.
+
+ As is recommended in Section 4.1.4 of this document, in such cases,
+ SZTP-clients SHOULD pass the "signed-data-preferred" input parameter.
+
+ The reciprocal of this statement is that SZTP-servers, wanting to
+ support SZTP-clients that don't trust them, SHOULD support the
+ "signed-data-preferred" input parameter, as discussed in Appendix B
+ of [RFC8572].
+
+4.3. Security Considerations for the "ietf-sztp-csr" YANG Module
+
+ The recommended format for documenting the security considerations
+ for YANG modules is described in Section 3.7 of [RFC8407]. However,
+ this module only augments two input parameters into the "get-
+ bootstrapping-data" RPC in [RFC8572] and therefore only needs to
+ point to the relevant Security Considerations sections in that RFC.
+
+ * Security considerations for the "get-bootstrapping-data" RPC are
+ described in Section 9.16 of [RFC8572].
+
+ * Security considerations for the "input" parameters passed inside
+ the "get-bootstrapping-data" RPC are described in Section 9.6 of
+ [RFC8572].
+
+4.4. Security Considerations for the "ietf-ztp-types" YANG Module
+
+ The recommended format for documenting the security considerations
+ for YANG modules is described in Section 3.7 of [RFC8407]. However,
+ this module does not define any protocol-accessible nodes (it only
+ defines "identity" and "grouping" statements), and therefore there
+ are no security considerations to report.
+
+5. IANA Considerations
+
+5.1. The IETF XML Registry
+
+ IANA has registered two URIs in the "ns" registry of the "IETF XML
+ Registry" [RFC3688] maintained at <https://www.iana.org/assignments/
+ xml-registry/>.
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-sztp-csr
+ Registrant Contact: The NETCONF WG of the IETF.
+ XML: N/A; the requested URI is an XML namespace.
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-ztp-types
+ Registrant Contact: The NETCONF WG of the IETF.
+ XML: N/A; the requested URI is an XML namespace.
+
+5.2. The YANG Module Names Registry
+
+ IANA has registered two YANG modules in the "YANG Module Names"
+ registry [RFC6020] maintained at <https://www.iana.org/assignments/
+ yang-parameters/>.
+
+ Name: ietf-sztp-csr
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-sztp-csr
+ Prefix: sztp-csr
+ Reference: RFC 9646
+
+ Name: ietf-ztp-types
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-ztp-types
+ Prefix: ztp-types
+ Reference: RFC 9646
+
+6. References
+
+6.1. Normative References
+
+ [ITU.X690.2021]
+ ITU, "Information technology - ASN.1 encoding rules:
+ Specification of Basic Encoding Rules (BER), Canonical
+ Encoding Rules (CER) and Distinguished Encoding Rules
+ (DER)", ITU-T Recommendation X.690, ISO/IEC 8825-1,
+ February 2021, <https://www.itu.int/rec/T-REC-X.690/>.
+
+ [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>.
+
+ [RFC2986] Nystrom, M. and B. Kaliski, "PKCS #10: Certification
+ Request Syntax Specification Version 1.7", RFC 2986,
+ DOI 10.17487/RFC2986, November 2000,
+ <https://www.rfc-editor.org/info/rfc2986>.
+
+ [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
+ DOI 10.17487/RFC3688, January 2004,
+ <https://www.rfc-editor.org/info/rfc3688>.
+
+ [RFC4210] Adams, C., Farrell, S., Kause, T., and T. Mononen,
+ "Internet X.509 Public Key Infrastructure Certificate
+ Management Protocol (CMP)", RFC 4210,
+ DOI 10.17487/RFC4210, September 2005,
+ <https://www.rfc-editor.org/info/rfc4210>.
+
+ [RFC5272] Schaad, J. and M. Myers, "Certificate Management over CMS
+ (CMC)", RFC 5272, DOI 10.17487/RFC5272, June 2008,
+ <https://www.rfc-editor.org/info/rfc5272>.
+
+ [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
+ the Network Configuration Protocol (NETCONF)", RFC 6020,
+ DOI 10.17487/RFC6020, October 2010,
+ <https://www.rfc-editor.org/info/rfc6020>.
+
+ [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
+ RFC 7950, DOI 10.17487/RFC7950, August 2016,
+ <https://www.rfc-editor.org/info/rfc7950>.
+
+ [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
+ Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
+ <https://www.rfc-editor.org/info/rfc8040>.
+
+ [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>.
+
+ [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>.
+
+ [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>.
+
+ [RFC8791] Bierman, A., Björklund, M., and K. Watsen, "YANG Data
+ Structure Extensions", RFC 8791, DOI 10.17487/RFC8791,
+ June 2020, <https://www.rfc-editor.org/info/rfc8791>.
+
+ [RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
+ Ed., "HTTP Semantics", STD 97, RFC 9110,
+ DOI 10.17487/RFC9110, June 2022,
+ <https://www.rfc-editor.org/info/rfc9110>.
+
+ [RFC9640] Watsen, K., "YANG Data Types and Groupings for
+ Cryptography", RFC 9640, DOI 10.17487/RFC9640, October
+ 2024, <https://www.rfc-editor.org/info/rfc9640>.
+
+6.2. Informative References
+
+ [AIS31] Killmann, W. and W. Schindler, "A proposal for:
+ Functionality classes for random number generators -
+ Version 2.0", September 2011,
+ <https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/
+ Zertifizierung/Interpretationen/AIS_31_Functionality_class
+ es_for_random_number_generators_e.pdf>.
+
+ [CVE-2008-0166]
+ National Institute of Science and Technology (NIST),
+ "National Vulnerability Database - CVE-2008-0166 Detail",
+ May 2008,
+ <https://nvd.nist.gov/vuln/detail/CVE-2008-0166>.
+
+ [ISO.20543-2019]
+ International Organization for Standardization (ISO),
+ "Information technology -- Security techniques -- Test and
+ analysis methods for random bit generators within ISO/IEC
+ 19790 and ISO/IEC 15408", ISO/IEC 20543:2019, October
+ 2019.
+
+ [MiningPsQs]
+ Heninger, N., Durumeric, Z., Wustrow, E., and J.
+ Halderman, "Mining Your Ps and Qs: Detection of Widespread
+ Weak Keys in Network Devices", Security'12: Proceedings of
+ the 21st USENIX Conference on Security Symposium, August
+ 2012, <https://www.usenix.org/conference/usenixsecurity12/
+ technical-sessions/presentation/heninger>.
+
+ [NIST.SP.800-90Ar1]
+ Barker, E. and J. Kelsey, "Recommendation for Random
+ Number Generation Using Deterministic Random Bit
+ Generators", DOI 10.6028/NIST.SP.800-90Ar1, NIST
+ SP 800-90Ar1, June 2015,
+ <https://nvlpubs.nist.gov/nistpubs/SpecialPublications/
+ NIST.SP.800-90Ar1.pdf>.
+
+ [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>.
+
+ [RFC7292] Moriarty, K., Ed., Nystrom, M., Parkinson, S., Rusch, A.,
+ and M. Scott, "PKCS #12: Personal Information Exchange
+ Syntax v1.1", RFC 7292, DOI 10.17487/RFC7292, July 2014,
+ <https://www.rfc-editor.org/info/rfc7292>.
+
+ [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams",
+ BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
+ <https://www.rfc-editor.org/info/rfc8340>.
+
+ [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of
+ Documents Containing YANG Data Models", BCP 216, RFC 8407,
+ DOI 10.17487/RFC8407, October 2018,
+ <https://www.rfc-editor.org/info/rfc8407>.
+
+ [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>.
+
+ [RFC8808] Wu, Q., Lengyel, B., and Y. Niu, "A YANG Data Model for
+ Factory Default Settings", RFC 8808, DOI 10.17487/RFC8808,
+ August 2020, <https://www.rfc-editor.org/info/rfc8808>.
+
+ [RFC9641] Watsen, K., "A YANG Data Model for a Truststore",
+ RFC 9641, DOI 10.17487/RFC9641, October 2024,
+ <https://www.rfc-editor.org/info/rfc9641>.
+
+ [RFC9642] Watsen, K., "A YANG Data Model for a Keystore", RFC 9642,
+ DOI 10.17487/RFC9642, October 2024,
+ <https://www.rfc-editor.org/info/rfc9642>.
+
+ [Std-802.1AR-2018]
+ IEEE, "IEEE Standard for Local and Metropolitan Area
+ Networks - Secure Device Identity", August 2018,
+ <https://standards.ieee.org/ieee/802.1AR/6995/>.
+
+Acknowledgements
+
+ The authors would like to thank for following for lively discussions
+ on list and in the halls (ordered by first name): Benjamin Kaduk, Dan
+ Romascanu, David von Oheimb, Éric Vyncke, Guy Fedorkow, Hendrik
+ Brockhaus, Joe Clarke, Meral Shirazipour, Murray Kucherawy, Rich
+ Salz, Rob Wilton, Roman Danyliw, Qin Wu, Yaron Sheffer, and
+ Zaheduzzaman Sarkar.
+
+Contributors
+
+ Special thanks go to David von Oheimb and Hendrik Brockhaus for
+ helping with the descriptions for the "cmc-csr" and "cmp-csr" nodes.
+
+Authors' Addresses
+
+ Kent Watsen
+ Watsen Networks
+ Email: kent+ietf@watsen.net
+
+
+ Russ Housley
+ Vigil Security, LLC
+ Email: housley@vigilsec.com
+
+
+ Sean Turner
+ sn3rd
+ Email: sean@sn3rd.com