| rfc9642.original | rfc9642.txt | |||
|---|---|---|---|---|
| NETCONF Working Group K. Watsen | Internet Engineering Task Force (IETF) K. Watsen | |||
| Internet-Draft Watsen Networks | Request for Comments: 9642 Watsen Networks | |||
| Intended status: Standards Track 16 March 2024 | Category: Standards Track October 2024 | |||
| Expires: 17 September 2024 | ISSN: 2070-1721 | |||
| A YANG Data Model for a Keystore and Keystore Operations | A YANG Data Model for a Keystore | |||
| draft-ietf-netconf-keystore-35 | ||||
| Abstract | Abstract | |||
| This document presents a YANG module called "ietf-keystore" that | This document presents a YANG module called "ietf-keystore" that | |||
| enables centralized configuration of both symmetric and asymmetric | enables centralized configuration of both symmetric and asymmetric | |||
| keys. The secret value for both key types may be encrypted or | keys. The secret value for both key types may be encrypted or | |||
| hidden. Asymmetric keys may be associated with certificates. | hidden. Asymmetric keys may be associated with certificates. | |||
| Notifications are sent when certificates are about to expire. | Notifications are sent when certificates are about to expire. | |||
| Editorial Note (To be removed by RFC Editor) | ||||
| This draft contains placeholder values that need to be replaced with | ||||
| finalized values at the time of publication. This note summarizes | ||||
| all of the substitutions that are needed. No other RFC Editor | ||||
| instructions are specified elsewhere in this document. | ||||
| Artwork in this document contains shorthand references to drafts in | ||||
| progress. Please apply the following replacements: | ||||
| * AAAA --> the assigned RFC value for draft-ietf-netconf-crypto- | ||||
| types | ||||
| * CCCC --> the assigned RFC value for this draft | ||||
| Artwork in this document contains placeholder values for the date of | ||||
| publication of this draft. Please apply the following replacement: | ||||
| * 2024-03-16 --> the publication date of this draft | ||||
| The "Relation to other RFCs" section Section 1.1 contains the text | ||||
| "one or more YANG modules" and, later, "modules". This text is | ||||
| sourced from a file in a context where it is unknown how many modules | ||||
| a draft defines. The text is not wrong as is, but it may be improved | ||||
| by stating more directly how many modules are defined. | ||||
| The "Relation to other RFCs" section Section 1.1 contains a self- | ||||
| reference to this draft, along with a corresponding reference in the | ||||
| Appendix. Please replace the self-reference in this section with | ||||
| "This RFC" (or similar) and remove the self-reference in the | ||||
| "Normative/Informative References" section, whichever it is in. | ||||
| Tree-diagrams in this draft may use the '\' line-folding mode defined | ||||
| in RFC 8792. However, nicer-to-the-eye is when the '\\' line-folding | ||||
| mode is used. The AD suggested suggested putting a request here for | ||||
| the RFC Editor to help convert "ugly" '\' folded examples to use the | ||||
| '\\' folding mode. "Help convert" may be interpreted as, identify | ||||
| what looks ugly and ask the authors to make the adjustment. | ||||
| The following Appendix section is to be removed prior to publication: | ||||
| * Appendix A. Change Log | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 17 September 2024. | 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/rfc9642. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2024 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction | |||
| 1.1. Relation to other RFCs . . . . . . . . . . . . . . . . . 5 | 1.1. Relation to Other RFCs | |||
| 1.2. Specification Language . . . . . . . . . . . . . . . . . 6 | 1.2. Specification Language | |||
| 1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6 | 1.3. Terminology | |||
| 1.4. Adherence to the NMDA . . . . . . . . . . . . . . . . . . 7 | 1.4. Adherence to the NMDA | |||
| 1.5. Conventions . . . . . . . . . . . . . . . . . . . . . . . 7 | 1.5. Conventions | |||
| 2. The "ietf-keystore" Module . . . . . . . . . . . . . . . . . 7 | 2. The "ietf-keystore" Module | |||
| 2.1. Data Model Overview . . . . . . . . . . . . . . . . . . . 7 | 2.1. Data Model Overview | |||
| 2.2. Example Usage . . . . . . . . . . . . . . . . . . . . . . 16 | 2.2. Example Usage | |||
| 2.3. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 27 | 2.3. YANG Module | |||
| 3. Support for Built-in Keys . . . . . . . . . . . . . . . . . . 36 | 3. Support for Built-In Keys | |||
| 4. Encrypting Keys in Configuration . . . . . . . . . . . . . . 38 | 4. Encrypting Keys in Configuration | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 43 | 5. Security Considerations | |||
| 5.1. Security of Data at Rest and in Motion . . . . . . . . . 43 | 5.1. Security of Data at Rest and in Motion | |||
| 5.2. Unconstrained Private Key Usage . . . . . . . . . . . . . 43 | 5.2. Unconstrained Private Key Usage | |||
| 5.3. Considerations for the "ietf-keystore" YANG Module . . . 43 | 5.3. Security Considerations for the "ietf-keystore" YANG Module | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 45 | 6. IANA Considerations | |||
| 6.1. The "IETF XML" Registry . . . . . . . . . . . . . . . . . 45 | 6.1. The IETF XML Registry | |||
| 6.2. The "YANG Module Names" Registry . . . . . . . . . . . . 45 | 6.2. The YANG Module Names Registry | |||
| 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 45 | 7. References | |||
| 7.1. Normative References . . . . . . . . . . . . . . . . . . 45 | 7.1. Normative References | |||
| 7.2. Informative References . . . . . . . . . . . . . . . . . 46 | 7.2. Informative References | |||
| Appendix A. Change Log . . . . . . . . . . . . . . . . . . . . . 48 | Acknowledgements | |||
| A.1. 00 to 01 . . . . . . . . . . . . . . . . . . . . . . . . 48 | Author's Address | |||
| A.2. 01 to 02 . . . . . . . . . . . . . . . . . . . . . . . . 48 | ||||
| A.3. 02 to 03 . . . . . . . . . . . . . . . . . . . . . . . . 49 | ||||
| A.4. 03 to 04 . . . . . . . . . . . . . . . . . . . . . . . . 49 | ||||
| A.5. 04 to 05 . . . . . . . . . . . . . . . . . . . . . . . . 49 | ||||
| A.6. 05 to 06 . . . . . . . . . . . . . . . . . . . . . . . . 49 | ||||
| A.7. 06 to 07 . . . . . . . . . . . . . . . . . . . . . . . . 50 | ||||
| A.8. 07 to 08 . . . . . . . . . . . . . . . . . . . . . . . . 50 | ||||
| A.9. 08 to 09 . . . . . . . . . . . . . . . . . . . . . . . . 50 | ||||
| A.10. 09 to 10 . . . . . . . . . . . . . . . . . . . . . . . . 50 | ||||
| A.11. 10 to 11 . . . . . . . . . . . . . . . . . . . . . . . . 51 | ||||
| A.12. 11 to 12 . . . . . . . . . . . . . . . . . . . . . . . . 51 | ||||
| A.13. 12 to 13 . . . . . . . . . . . . . . . . . . . . . . . . 51 | ||||
| A.14. 13 to 14 . . . . . . . . . . . . . . . . . . . . . . . . 51 | ||||
| A.15. 14 to 15 . . . . . . . . . . . . . . . . . . . . . . . . 51 | ||||
| A.16. 15 to 16 . . . . . . . . . . . . . . . . . . . . . . . . 52 | ||||
| A.17. 16 to 17 . . . . . . . . . . . . . . . . . . . . . . . . 52 | ||||
| A.18. 17 to 18 . . . . . . . . . . . . . . . . . . . . . . . . 52 | ||||
| A.19. 18 to 19 . . . . . . . . . . . . . . . . . . . . . . . . 53 | ||||
| A.20. 19 to 20 . . . . . . . . . . . . . . . . . . . . . . . . 53 | ||||
| A.21. 20 to 21 . . . . . . . . . . . . . . . . . . . . . . . . 53 | ||||
| A.22. 21 to 22 . . . . . . . . . . . . . . . . . . . . . . . . 53 | ||||
| A.23. 22 to 23 . . . . . . . . . . . . . . . . . . . . . . . . 53 | ||||
| A.24. 23 to 24 . . . . . . . . . . . . . . . . . . . . . . . . 53 | ||||
| A.25. 24 to 25 . . . . . . . . . . . . . . . . . . . . . . . . 54 | ||||
| A.26. 25 to 26 . . . . . . . . . . . . . . . . . . . . . . . . 54 | ||||
| A.27. 26 to 27 . . . . . . . . . . . . . . . . . . . . . . . . 54 | ||||
| A.28. 27 to 28 . . . . . . . . . . . . . . . . . . . . . . . . 54 | ||||
| A.29. 28 to 29 . . . . . . . . . . . . . . . . . . . . . . . . 54 | ||||
| A.30. 29 to 30 . . . . . . . . . . . . . . . . . . . . . . . . 55 | ||||
| A.31. 30 to 31 . . . . . . . . . . . . . . . . . . . . . . . . 55 | ||||
| A.32. 31 to 33 . . . . . . . . . . . . . . . . . . . . . . . . 55 | ||||
| A.33. 33 to 34 . . . . . . . . . . . . . . . . . . . . . . . . 55 | ||||
| A.34. 34 to 35 . . . . . . . . . . . . . . . . . . . . . . . . 55 | ||||
| Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 55 | ||||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 55 | ||||
| 1. Introduction | 1. Introduction | |||
| This document presents a YANG 1.1 [RFC7950] module called "ietf- | This document presents a YANG 1.1 [RFC7950] module called "ietf- | |||
| keystore" that enables centralized configuration of both symmetric | keystore" that enables centralized configuration of both symmetric | |||
| and asymmetric keys. The secret value for both key types may be | and asymmetric keys. The secret value for both key types may be | |||
| encrypted or hidden (see [I-D.ietf-netconf-crypto-types]). | encrypted or hidden (see [RFC9640]). Asymmetric keys may be | |||
| Asymmetric keys may be associated with certificates. Notifications | associated with certificates. Notifications are sent when | |||
| are sent when certificates are about to expire. | certificates are about to expire. | |||
| The "ietf-keystore" module defines many "grouping" statements | The "ietf-keystore" module defines many "grouping" statements | |||
| intended for use by other modules that may import it. For instance, | intended for use by other modules that may import it. For instance, | |||
| there are groupings that define enabling a key to be either | there are groupings that define enabling a key to be configured | |||
| configured inline (within the defining data model) or as a reference | either inline (within the defining data model) or as a reference to a | |||
| to a key in the central keystore. | key in the central keystore. | |||
| Special consideration has been given for servers that have | Special consideration has been given for servers that have | |||
| cryptographic hardware, such as a Trusted Platform Module (TPM). | cryptographic hardware, such as a trusted platform module (TPM). | |||
| These servers are unique in that the cryptographic hardware hides the | These servers are unique in that the cryptographic hardware hides the | |||
| secret key values. Additionally, such hardware is commonly | secret key values. Additionally, such hardware is commonly | |||
| initialized when manufactured to protect a "built-in" asymmetric key | initialized when manufactured to protect a "built-in" asymmetric key | |||
| for which its public half is conveyed in an identity certificate | for which its public half is conveyed in an identity certificate | |||
| (e.g., an IDevID [Std-802.1AR-2018] certificate). Please see | (e.g., an Initial Device Identifier (IDevID) [Std-802.1AR-2018] | |||
| Section 3 to see how built-in keys are supported. | certificate). See how built-in keys are supported in Section 3. | |||
| This document is intended to reflect existing practices that many | This document is intended to reflect existing practices that many | |||
| server implementations support at the time of writing. To simplify | server implementations support at the time of writing. To simplify | |||
| implementation, advanced key formats may be selectively implemented. | implementation, advanced key formats may be selectively implemented. | |||
| Implementations may utilize operating-system level keystore utilities | Implementations may utilize operating-system level keystore utilities | |||
| (e.g., "Keychain Access" on MacOS) and/or cryptographic hardware | (e.g., "Keychain Access" on MacOS) and/or cryptographic hardware | |||
| (e.g., TPMs). | (e.g., TPMs). | |||
| 1.1. Relation to other RFCs | 1.1. Relation to Other RFCs | |||
| This document presents one or more YANG modules [RFC7950] that are | This document presents a YANG module [RFC7950] that is part of a | |||
| part of a collection of RFCs that work together to, ultimately, | collection of RFCs that work together to ultimately support the | |||
| support the configuration of both the clients and servers of both the | configuration of both the clients and servers of the Network | |||
| NETCONF [RFC6241] and RESTCONF [RFC8040] protocols. | Configuration Protocol (NETCONF) [RFC6241] and RESTCONF [RFC8040]. | |||
| The dependency relationship between the primary YANG groupings | The dependency relationship between the primary YANG groupings | |||
| defined in the various RFCs is presented in the below diagram. In | defined in the various RFCs is presented in the diagram below. In | |||
| some cases, a draft may define secondary groupings that introduce | some cases, a document may define secondary groupings that introduce | |||
| dependencies not illustrated in the diagram. The labels in the | dependencies not illustrated in the diagram. The labels in the | |||
| diagram are a shorthand name for the defining RFC. The citation | diagram are shorthand names for the defining RFCs. The citation | |||
| reference for shorthand name is provided below the diagram. | references for the shorthand names are provided below the diagram. | |||
| Please note that the arrows in the diagram point from referencer to | Please note that the arrows in the diagram point from referencer to | |||
| referenced. For example, the "crypto-types" RFC does not have any | referenced. For example, the "crypto-types" RFC does not have any | |||
| dependencies, whilst the "keystore" RFC depends on the "crypto-types" | dependencies, whilst the "keystore" RFC depends on the "crypto-types" | |||
| RFC. | RFC. | |||
| crypto-types | crypto-types | |||
| ^ ^ | ^ ^ | |||
| / \ | / \ | |||
| / \ | / \ | |||
| skipping to change at page 6, line 5 ¶ | skipping to change at line 147 ¶ | |||
| | | | | | ^ | | | | | | ^ | |||
| | | | +-----+ +---------+ | | | | | +-----+ +---------+ | | |||
| | | | | | | | | | | | | | | |||
| | +-----------|--------|--------------+ | | | | +-----------|--------|--------------+ | | | |||
| | | | | | | | | | | | | | | |||
| +-----------+ | | | | | | +-----------+ | | | | | | |||
| | | | | | | | | | | | | | | |||
| | | | | | | | | | | | | | | |||
| netconf-client-server restconf-client-server | netconf-client-server restconf-client-server | |||
| +======================+===========================================+ | +========================+==========================+ | |||
| |Label in Diagram | Originating RFC | | | Label in Diagram | Originating RFC | | |||
| +======================+===========================================+ | +========================+==========================+ | |||
| |crypto-types | [I-D.ietf-netconf-crypto-types] | | | crypto-types | [RFC9640] | | |||
| +----------------------+-------------------------------------------+ | +------------------------+--------------------------+ | |||
| |truststore | [I-D.ietf-netconf-trust-anchors] | | | truststore | [RFC9641] | | |||
| +----------------------+-------------------------------------------+ | +------------------------+--------------------------+ | |||
| |keystore | [I-D.ietf-netconf-keystore] | | | keystore | RFC 9642 | | |||
| +----------------------+-------------------------------------------+ | +------------------------+--------------------------+ | |||
| |tcp-client-server | [I-D.ietf-netconf-tcp-client-server] | | | tcp-client-server | [RFC9643] | | |||
| +----------------------+-------------------------------------------+ | +------------------------+--------------------------+ | |||
| |ssh-client-server | [I-D.ietf-netconf-ssh-client-server] | | | ssh-client-server | [RFC9644] | | |||
| +----------------------+-------------------------------------------+ | +------------------------+--------------------------+ | |||
| |tls-client-server | [I-D.ietf-netconf-tls-client-server] | | | tls-client-server | [RFC9645] | | |||
| +----------------------+-------------------------------------------+ | +------------------------+--------------------------+ | |||
| |http-client-server | [I-D.ietf-netconf-http-client-server] | | | http-client-server | [HTTP-CLIENT-SERVER] | | |||
| +----------------------+-------------------------------------------+ | +------------------------+--------------------------+ | |||
| |netconf-client-server | [I-D.ietf-netconf-netconf-client-server] | | | netconf-client-server | [NETCONF-CLIENT-SERVER] | | |||
| +----------------------+-------------------------------------------+ | +------------------------+--------------------------+ | |||
| |restconf-client-server| [I-D.ietf-netconf-restconf-client-server] | | | restconf-client-server | [RESTCONF-CLIENT-SERVER] | | |||
| +----------------------+-------------------------------------------+ | +------------------------+--------------------------+ | |||
| Table 1: Label in Diagram to RFC Mapping | Table 1: Labels in Diagram to RFC Mapping | |||
| 1.2. Specification Language | 1.2. Specification Language | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 1.3. Terminology | 1.3. Terminology | |||
| The terms "client" and "server" are defined in [RFC6241] and are not | The terms "client" and "server" are defined in [RFC6241] and are not | |||
| redefined here. | redefined here. | |||
| The term "keystore" is defined in this document as a mechanism that | The term "keystore" is defined in this document as a mechanism that | |||
| intends to safeguard secrets. | intends to safeguard secrets. | |||
| The nomenclature "<running>" and "<operational>" are defined in | The nomenclatures "<running>" and "<operational>" are defined in | |||
| [RFC8342]. | [RFC8342]. | |||
| The sentence fragments "augmented" and "augmented in" are used herein | The sentence fragments "augmented" and "augmented in" are used herein | |||
| as the past tense verbified form of the "augment" statement defined | as the past tense verbified form of the "augment" statement defined | |||
| in Section 7.17 of [RFC7950]. | in Section 7.17 of [RFC7950]. | |||
| The term "key" may be used to mean one of three things in this | The term "key" may be used to mean one of three things in this | |||
| document: 1) the YANG-defined "asymmetric-key" or "symmetric-key" | document: 1) the YANG-defined "asymmetric-key" or "symmetric-key" | |||
| node defined in this document, 2) the raw key data possessed by the | node defined in this document, 2) the raw key data possessed by the | |||
| aforementioned key nodes, and 3) the "key" of a YANG "list" | aforementioned key nodes, or 3) the "key" of a YANG "list" statement. | |||
| statement. This document attempts to always qualify types '2' and | This document qualifies types '2' and '3' using "raw key value" and | |||
| '3' using, "raw key value" and "YANG list key" where needed. In all | "YANG list key" where needed. In all other cases, an unqualified | |||
| other cases, an unqualified "key" refers to a YANG-defined | "key" refers to a YANG-defined "asymmetric-key" or "symmetric-key" | |||
| "asymmetric-key" or "symmetric-key" node. | node. | |||
| 1.4. Adherence to the NMDA | 1.4. Adherence to the NMDA | |||
| This document is compliant with Network Management Datastore | This document is compliant with Network Management Datastore | |||
| Architecture (NMDA) [RFC8342]. For instance, keys and associated | Architecture (NMDA) [RFC8342]. For instance, keys and associated | |||
| certificates installed during manufacturing (e.g., for an IDevID | certificates installed during manufacturing (e.g., for an IDevID | |||
| certificate) are expected to appear in <operational> (see Section 3). | certificate) are expected to appear in <operational> (see Section 3). | |||
| 1.5. Conventions | 1.5. Conventions | |||
| Various examples in this document use "BASE64VALUE=" as a placeholder | Various examples in this document use "BASE64VALUE=" as a placeholder | |||
| value for binary data that has been base64 encoded (per Section 9.8 | value for binary data that has been base64 encoded (per Section 9.8 | |||
| of [RFC7950]). This placeholder value is used because real base64 | of [RFC7950]). This placeholder value is used because real | |||
| encoded structures are often many lines long and hence distracting to | base64-encoded structures are often many lines long and hence | |||
| the example being presented. | distracting to the example being presented. | |||
| Various examples in this document use the XML [W3C.REC-xml-20081126] | ||||
| encoding. Other encodings, such as JSON [RFC8259], could | ||||
| alternatively be used. | ||||
| Various examples in this document contain long lines that may be | ||||
| folded, as described in [RFC8792]. | ||||
| This document uses the adjective "central" to the word "keystore" to | This document uses the adjective "central" to the word "keystore" to | |||
| refer to the top-level instance of the "keystore-grouping", when the | refer to the top-level instance of the "keystore-grouping", when the | |||
| "central-keystore-supported" feature is enabled. Please be aware | "central-keystore-supported" feature is enabled. Please be aware | |||
| that consuming YANG modules MAY instantiate the "keystore-grouping" | that consuming YANG modules MAY instantiate the "keystore-grouping" | |||
| in other locations. All such other instances are not the "central" | in other locations. All such other instances are not the "central" | |||
| instance. | instance. | |||
| 2. The "ietf-keystore" Module | 2. The "ietf-keystore" Module | |||
| skipping to change at page 8, line 33 ¶ | skipping to change at line 278 ¶ | |||
| The diagram above uses syntax that is similar to but not defined in | The diagram above uses syntax that is similar to but not defined in | |||
| [RFC8340]. | [RFC8340]. | |||
| Comments: | Comments: | |||
| * All the typedefs defined in the "ietf-keystore" module extend the | * All the typedefs defined in the "ietf-keystore" module extend the | |||
| base "leafref" type defined in [RFC7950]. | base "leafref" type defined in [RFC7950]. | |||
| * The leafrefs refer to symmetric and asymmetric keys in the central | * The leafrefs refer to symmetric and asymmetric keys in the central | |||
| keystore, when this module is implemented. | keystore when this module is implemented. | |||
| * These typedefs are provided as an aid to consuming modules that | * These typedefs are provided as an aid to consuming modules that | |||
| import the "ietf-keystore" module. | import the "ietf-keystore" module. | |||
| 2.1.3. Groupings | 2.1.3. Groupings | |||
| The "ietf-keystore" module defines the following "grouping" | The "ietf-keystore" module defines the following "grouping" | |||
| statements: | statements: | |||
| * encrypted-by-grouping | * encrypted-by-grouping | |||
| skipping to change at page 10, line 24 ¶ | skipping to change at line 364 ¶ | |||
| | +---u ct:symmetric-key-grouping | | +---u ct:symmetric-key-grouping | |||
| +--:(central-keystore) | +--:(central-keystore) | |||
| {central-keystore-supported,symmetric-keys}? | {central-keystore-supported,symmetric-keys}? | |||
| +-- central-keystore-reference? | +-- central-keystore-reference? | |||
| ks:central-symmetric-key-ref | ks:central-symmetric-key-ref | |||
| Comments: | Comments: | |||
| * The "inline-or-keystore-symmetric-key-grouping" grouping is | * The "inline-or-keystore-symmetric-key-grouping" grouping is | |||
| provided solely as convenience to consuming modules that wish to | provided solely as convenience to consuming modules that wish to | |||
| offer an option for whether a symmetric key is defined inline or | offer an option for a symmetric key that is defined either inline | |||
| as a reference to a symmetric key in the keystore. | or as a reference to a symmetric key in the keystore. | |||
| * A "choice" statement is used to expose the various options. Each | * A "choice" statement is used to expose the various options. Each | |||
| option is enabled by a "feature" statement. Additional "case" | option is enabled by a "feature" statement. Additional "case" | |||
| statements MAY be augmented in if, e.g., there is a need to | statements MAY be augmented in if, e.g., there is a need to | |||
| reference a symmetric key in an alternate location. | reference a symmetric key in an alternate location. | |||
| * For the "inline-definition" option, the definition uses the | * For the "inline-definition" option, the definition uses the | |||
| "symmetric-key-grouping" grouping discussed in Section 2.1.4.3 of | "symmetric-key-grouping" grouping discussed in Section 2.1.4.3 of | |||
| [I-D.ietf-netconf-crypto-types]. | [RFC9640]. | |||
| * For the "central-keystore" option, the "central-keystore- | * For the "central-keystore" option, the "central-keystore- | |||
| reference" is an instance of the "symmetric-key-ref" discussed in | reference" is an instance of the "symmetric-key-ref" discussed in | |||
| Section 2.1.2. | Section 2.1.2. | |||
| 2.1.3.4. The "inline-or-keystore-asymmetric-key-grouping" Grouping | 2.1.3.4. The "inline-or-keystore-asymmetric-key-grouping" Grouping | |||
| The following tree diagram [RFC8340] illustrates the "inline-or- | The following tree diagram [RFC8340] illustrates the "inline-or- | |||
| keystore-asymmetric-key-grouping" grouping: | keystore-asymmetric-key-grouping" grouping: | |||
| skipping to change at page 11, line 19 ¶ | skipping to change at line 399 ¶ | |||
| | +---u ct:asymmetric-key-pair-grouping | | +---u ct:asymmetric-key-pair-grouping | |||
| +--:(central-keystore) | +--:(central-keystore) | |||
| {central-keystore-supported,asymmetric-keys}? | {central-keystore-supported,asymmetric-keys}? | |||
| +-- central-keystore-reference? | +-- central-keystore-reference? | |||
| ks:central-asymmetric-key-ref | ks:central-asymmetric-key-ref | |||
| Comments: | Comments: | |||
| * The "inline-or-keystore-asymmetric-key-grouping" grouping is | * The "inline-or-keystore-asymmetric-key-grouping" grouping is | |||
| provided solely as convenience to consuming modules that wish to | provided solely as convenience to consuming modules that wish to | |||
| offer an option for whether an asymmetric key is defined inline or | offer an option for an asymmetric key that is defined either | |||
| as a reference to an asymmetric key in the keystore. | inline or as a reference to an asymmetric key in the keystore. | |||
| * A "choice" statement is used to expose the various options. Each | * A "choice" statement is used to expose the various options. Each | |||
| option is enabled by a "feature" statement. Additional "case" | option is enabled by a "feature" statement. Additional "case" | |||
| statements MAY be augmented in if, e.g., there is a need to | statements MAY be augmented in if, e.g., there is a need to | |||
| reference an asymmetric key in an alternate location. | reference an asymmetric key in an alternate location. | |||
| * For the "inline-definition" option, the definition uses the | * For the "inline-definition" option, the definition uses the | |||
| "asymmetric-key-pair-grouping" grouping discussed in | "asymmetric-key-pair-grouping" grouping discussed in | |||
| Section 2.1.4.6 of [I-D.ietf-netconf-crypto-types]. | Section 2.1.4.6 of [RFC9640]. | |||
| * For the "central-keystore" option, the "central-keystore- | * For the "central-keystore" option, the "central-keystore- | |||
| reference" is an instance of the "asymmetric-key-ref" typedef | reference" is an instance of the "asymmetric-key-ref" typedef | |||
| discussed in Section 2.1.2. | discussed in Section 2.1.2. | |||
| 2.1.3.5. The "inline-or-keystore-asymmetric-key-with-certs-grouping" | 2.1.3.5. The "inline-or-keystore-asymmetric-key-with-certs-grouping" | |||
| Grouping | Grouping | |||
| The following tree diagram [RFC8340] illustrates the "inline-or- | The following tree diagram [RFC8340] illustrates the "inline-or- | |||
| keystore-asymmetric-key-with-certs-grouping" grouping: | keystore-asymmetric-key-with-certs-grouping" grouping: | |||
| skipping to change at page 12, line 7 ¶ | skipping to change at line 435 ¶ | |||
| | +---u ct:asymmetric-key-pair-with-certs-grouping | | +---u ct:asymmetric-key-pair-with-certs-grouping | |||
| +--:(central-keystore) | +--:(central-keystore) | |||
| {central-keystore-supported,asymmetric-keys}? | {central-keystore-supported,asymmetric-keys}? | |||
| +-- central-keystore-reference? | +-- central-keystore-reference? | |||
| ks:central-asymmetric-key-ref | ks:central-asymmetric-key-ref | |||
| Comments: | Comments: | |||
| * The "inline-or-keystore-asymmetric-key-with-certs-grouping" | * The "inline-or-keystore-asymmetric-key-with-certs-grouping" | |||
| grouping is provided solely as convenience to consuming modules | grouping is provided solely as convenience to consuming modules | |||
| that wish to offer an option for whether an asymmetric key is | that wish to offer an option for an asymmetric key that is defined | |||
| defined inline or as a reference to an asymmetric key in the | either inline or as a reference to an asymmetric key in the | |||
| keystore. | keystore. | |||
| * A "choice" statement is used to expose the various options. Each | * A "choice" statement is used to expose the various options. Each | |||
| option is enabled by a "feature" statement. Additional "case" | option is enabled by a "feature" statement. Additional "case" | |||
| statements MAY be augmented in if, e.g., there is a need to | statements MAY be augmented in if, e.g., there is a need to | |||
| reference an asymmetric key in an alternate location. | reference an asymmetric key in an alternate location. | |||
| * For the "inline-definition" option, the definition uses the | * For the "inline-definition" option, the definition uses the | |||
| "asymmetric-key-pair-with-certs-grouping" grouping discussed in | "asymmetric-key-pair-with-certs-grouping" grouping discussed in | |||
| Section 2.1.4.12 of [I-D.ietf-netconf-crypto-types]. | Section 2.1.4.12 of [RFC9640]. | |||
| * For the "central-keystore" option, the "central-keystore- | * For the "central-keystore" option, the "central-keystore- | |||
| reference" is an instance of the "asymmetric-key-ref" typedef | reference" is an instance of the "asymmetric-key-ref" typedef | |||
| discussed in Section 2.1.2. | discussed in Section 2.1.2. | |||
| 2.1.3.6. The "inline-or-keystore-end-entity-cert-with-key-grouping" | 2.1.3.6. The "inline-or-keystore-end-entity-cert-with-key-grouping" | |||
| Grouping | Grouping | |||
| The following tree diagram [RFC8340] illustrates the "inline-or- | The following tree diagram [RFC8340] illustrates the "inline-or- | |||
| keystore-end-entity-cert-with-key-grouping" grouping: | keystore-end-entity-cert-with-key-grouping" grouping: | |||
| skipping to change at page 12, line 44 ¶ | skipping to change at line 472 ¶ | |||
| | +---u ct:asymmetric-key-pair-with-cert-grouping | | +---u ct:asymmetric-key-pair-with-cert-grouping | |||
| +--:(central-keystore) | +--:(central-keystore) | |||
| {central-keystore-supported,asymmetric-keys}? | {central-keystore-supported,asymmetric-keys}? | |||
| +-- central-keystore-reference | +-- central-keystore-reference | |||
| +---u central-asymmetric-key-certificate-ref-grouping | +---u central-asymmetric-key-certificate-ref-grouping | |||
| Comments: | Comments: | |||
| * The "inline-or-keystore-end-entity-cert-with-key-grouping" | * The "inline-or-keystore-end-entity-cert-with-key-grouping" | |||
| grouping is provided solely as convenience to consuming modules | grouping is provided solely as convenience to consuming modules | |||
| that wish to offer an option for whether a symmetric key is | that wish to offer an option for a symmetric key that is defined | |||
| defined inline or as a reference to a symmetric key in the | either inline or as a reference to a symmetric key in the | |||
| keystore. | keystore. | |||
| * A "choice" statement is used to expose the various options. Each | * A "choice" statement is used to expose the various options. Each | |||
| option is enabled by a "feature" statement. Additional "case" | option is enabled by a "feature" statement. Additional "case" | |||
| statements MAY be augmented in if, e.g., there is a need to | statements MAY be augmented in if, e.g., there is a need to | |||
| reference a symmetric key in an alternate location. | reference a symmetric key in an alternate location. | |||
| * For the "inline-definition" option, the definition uses the | * For the "inline-definition" option, the definition uses the | |||
| "asymmetric-key-pair-with-certs-grouping" grouping discussed in | "asymmetric-key-pair-with-certs-grouping" grouping discussed in | |||
| Section 2.1.4.12 of [I-D.ietf-netconf-crypto-types]. | Section 2.1.4.12 of [RFC9640]. | |||
| * For the "central-keystore" option, the "central-keystore- | * For the "central-keystore" option, the "central-keystore- | |||
| reference" uses the "central-asymmetric-key-certificate-ref- | reference" uses the "central-asymmetric-key-certificate-ref- | |||
| grouping" grouping discussed in Section 2.1.3.2. | grouping" grouping discussed in Section 2.1.3.2. | |||
| 2.1.3.7. The "keystore-grouping" Grouping | 2.1.3.7. The "keystore-grouping" Grouping | |||
| The following tree diagram [RFC8340] illustrates the "keystore- | The following tree diagram [RFC8340] illustrates the "keystore- | |||
| grouping" grouping: | grouping" grouping: | |||
| grouping keystore-grouping: | grouping keystore-grouping: | |||
| +-- asymmetric-keys {asymmetric-keys}? | +-- asymmetric-keys {asymmetric-keys}? | |||
| | +-- asymmetric-key* [name] | | +-- asymmetric-key* [name] | |||
| | +-- name? string | | +-- name string | |||
| | +---u ct:asymmetric-key-pair-with-certs-grouping | | +---u ct:asymmetric-key-pair-with-certs-grouping | |||
| +-- symmetric-keys {symmetric-keys}? | +-- symmetric-keys {symmetric-keys}? | |||
| +-- symmetric-key* [name] | +-- symmetric-key* [name] | |||
| +-- name? string | +-- name string | |||
| +---u ct:symmetric-key-grouping | +---u ct:symmetric-key-grouping | |||
| Comments: | Comments: | |||
| * The "keystore-grouping" grouping defines a keystore instance as | * The "keystore-grouping" grouping defines a keystore instance as | |||
| being composed of symmetric and asymmetric keys. The structure | being composed of symmetric and asymmetric keys. The structure | |||
| for the symmetric and asymmetric keys is essentially the same, | for the symmetric and asymmetric keys is essentially the same: a | |||
| being a "list" inside a "container". | "list" inside a "container". | |||
| * For asymmetric keys, each "asymmetric-key" uses the "asymmetric- | * For asymmetric keys, each "asymmetric-key" uses the "asymmetric- | |||
| key-pair-with-certs-grouping" grouping discussed in | key-pair-with-certs-grouping" grouping discussed in | |||
| Section 2.1.4.12 of [I-D.ietf-netconf-crypto-types]. | Section 2.1.4.12 of [RFC9640]. | |||
| * For symmetric keys, each "symmetric-key" uses the "symmetric-key- | * For symmetric keys, each "symmetric-key" uses the "symmetric-key- | |||
| grouping" grouping discussed in Section 2.1.4.3 of | grouping" grouping discussed in Section 2.1.4.3 of [RFC9640]. | |||
| [I-D.ietf-netconf-crypto-types]. | ||||
| 2.1.4. Protocol-accessible Nodes | 2.1.4. Protocol-Accessible Nodes | |||
| The following tree diagram [RFC8340] lists all the protocol- | The following tree diagram [RFC8340] lists all the protocol- | |||
| accessible nodes defined in the "ietf-keystore" module, without | accessible nodes defined in the "ietf-keystore" module without | |||
| expanding the "grouping" statements: | expanding the "grouping" statements: | |||
| module: ietf-keystore | module: ietf-keystore | |||
| +--rw keystore {central-keystore-supported}? | +--rw keystore {central-keystore-supported}? | |||
| +---u keystore-grouping | +---u keystore-grouping | |||
| The following tree diagram [RFC8340] lists all the protocol- | The following tree diagram [RFC8340] lists all the protocol- | |||
| accessible nodes defined in the "ietf-keystore" module, with all | accessible nodes defined in the "ietf-keystore" module, with all | |||
| "grouping" statements expanded, enabling the keystore's full | "grouping" statements expanded, enabling the keystore's full | |||
| structure to be seen: | structure to be seen. | |||
| =============== NOTE: '\' line wrapping per RFC 8792 ================ | =============== NOTE: '\' line wrapping per RFC 8792 ================ | |||
| module: ietf-keystore | module: ietf-keystore | |||
| +--rw keystore {central-keystore-supported}? | +--rw keystore {central-keystore-supported}? | |||
| +--rw asymmetric-keys {asymmetric-keys}? | +--rw asymmetric-keys {asymmetric-keys}? | |||
| | +--rw asymmetric-key* [name] | | +--rw asymmetric-key* [name] | |||
| | +--rw name string | | +--rw name string | |||
| | +--rw public-key-format? identityref | | +--rw public-key-format? identityref | |||
| | +--rw public-key? binary | | +--rw public-key? binary | |||
| skipping to change at page 16, line 6 ¶ | skipping to change at line 623 ¶ | |||
| * The protocol-accessible nodes for the "ietf-keystore" module are | * The protocol-accessible nodes for the "ietf-keystore" module are | |||
| instances of the "keystore-grouping" grouping discussed in | instances of the "keystore-grouping" grouping discussed in | |||
| Section 2.1.3.7. | Section 2.1.3.7. | |||
| * The top-level node "keystore" is additionally constrained by the | * The top-level node "keystore" is additionally constrained by the | |||
| feature "central-keystore-supported". | feature "central-keystore-supported". | |||
| * The "keystore-grouping" grouping is discussed in Section 2.1.3.7. | * The "keystore-grouping" grouping is discussed in Section 2.1.3.7. | |||
| * The reason for why "keystore-grouping" exists separate from the | * The reason for why "keystore-grouping" exists separate from the | |||
| protocol-accessible nodes definition is so as to enable instances | protocol-accessible nodes definition is to enable instances of the | |||
| of the keystore to be instantiated in other locations, as may be | keystore to be instantiated in other locations, as may be needed | |||
| needed or desired by some modules. | or desired by some modules. | |||
| 2.2. Example Usage | 2.2. Example Usage | |||
| The examples in this section are encoded using XML, such as might be | The examples in this section are encoded using XML, such as might be | |||
| the case when using the NETCONF protocol. Other encodings MAY be | the case when using the NETCONF protocol. Other encodings MAY be | |||
| used, such as JSON when using the RESTCONF protocol. | used, such as JSON when using the RESTCONF protocol. | |||
| 2.2.1. A Keystore Instance | 2.2.1. A Keystore Instance | |||
| The following example illustrates keys in <running>. Please see | The following example illustrates keys in <running>. Please see | |||
| skipping to change at page 19, line 28 ¶ | skipping to change at line 783 ¶ | |||
| <expiration-date>2018-08-05T14:18:53-05:00</expiration\ | <expiration-date>2018-08-05T14:18:53-05:00</expiration\ | |||
| -date> | -date> | |||
| </certificate-expiration> | </certificate-expiration> | |||
| </certificate> | </certificate> | |||
| </certificates> | </certificates> | |||
| </asymmetric-key> | </asymmetric-key> | |||
| </asymmetric-keys> | </asymmetric-keys> | |||
| </keystore> | </keystore> | |||
| </notification> | </notification> | |||
| 2.2.3. The "Local or Keystore" Groupings | 2.2.3. The "Inline or Keystore" Groupings | |||
| This section illustrates the various "inline-or-keystore" groupings | This section illustrates the various "inline-or-keystore" groupings | |||
| defined in the "ietf-keystore" module, specifically the "inline-or- | defined in the "ietf-keystore" module, specifically the "inline-or- | |||
| keystore-symmetric-key-grouping" (Section 2.1.3.3), "inline-or- | keystore-symmetric-key-grouping" (Section 2.1.3.3), "inline-or- | |||
| keystore-asymmetric-key-grouping" (Section 2.1.3.4), "inline-or- | keystore-asymmetric-key-grouping" (Section 2.1.3.4), "inline-or- | |||
| keystore-asymmetric-key-with-certs-grouping" (Section 2.1.3.5), and | keystore-asymmetric-key-with-certs-grouping" (Section 2.1.3.5), and | |||
| "inline-or-keystore-end-entity-cert-with-key-grouping" | "inline-or-keystore-end-entity-cert-with-key-grouping" | |||
| (Section 2.1.3.6) groupings. | (Section 2.1.3.6) groupings. | |||
| These examples assume the existence of an example module called "ex- | These examples assume the existence of an example module called "ex- | |||
| keystore-usage" having the namespace "https://example.com/ns/example- | keystore-usage" that has the namespace "https://example.com/ns/ | |||
| keystore-usage". | example-keystore-usage". | |||
| The ex-keystore-usage module is first presented using tree diagrams | The ex-keystore-usage module is first presented using tree diagrams | |||
| [RFC8340], followed by an instance example illustrating all the | [RFC8340], followed by an instance example illustrating all the | |||
| "inline-or-keystore" groupings in use, followed by the YANG module | "inline-or-keystore" groupings in use, followed by the YANG module | |||
| itself. | itself. | |||
| 2.2.3.1. Tree Diagrams for the "ex-keystore-usage" Module | 2.2.3.1. Tree Diagrams for the "ex-keystore-usage" Module | |||
| The following tree diagram illustrates "ex-keystore-usage" without | The following tree diagram illustrates "ex-keystore-usage" without | |||
| expanding the "grouping" statements: | expanding the "grouping" statements: | |||
| skipping to change at page 20, line 25 ¶ | skipping to change at line 827 ¶ | |||
| +--rw asymmetric-key-with-certs* [name] | +--rw asymmetric-key-with-certs* [name] | |||
| | +--rw name | | +--rw name | |||
| | | string | | | string | |||
| | +---u ks:inline-or-keystore-asymmetric-key-with-certs-groupi\ | | +---u ks:inline-or-keystore-asymmetric-key-with-certs-groupi\ | |||
| ng | ng | |||
| +--rw end-entity-cert-with-key* [name] | +--rw end-entity-cert-with-key* [name] | |||
| +--rw name | +--rw name | |||
| | string | | string | |||
| +---u ks:inline-or-keystore-end-entity-cert-with-key-grouping | +---u ks:inline-or-keystore-end-entity-cert-with-key-grouping | |||
| The following tree diagram illustrates the "ex-keystore-usage" | The following tree diagram illustrates the "ex-keystore-usage" module | |||
| module, with all "grouping" statements expanded, enabling the usage's | with all "grouping" statements expanded, enabling the usage's full | |||
| full structure to be seen: | structure to be seen: | |||
| =============== NOTE: '\' line wrapping per RFC 8792 ================ | =============== NOTE: '\' line wrapping per RFC 8792 ================ | |||
| module: ex-keystore-usage | module: ex-keystore-usage | |||
| +--rw keystore-usage | +--rw keystore-usage | |||
| +--rw symmetric-key* [name] | +--rw symmetric-key* [name] | |||
| | +--rw name string | | +--rw name string | |||
| | +--rw (inline-or-keystore) | | +--rw (inline-or-keystore) | |||
| | +--:(inline) {inline-definitions-supported}? | | +--:(inline) {inline-definitions-supported}? | |||
| | | +--rw inline-definition | | | +--rw inline-definition | |||
| skipping to change at page 23, line 33 ¶ | skipping to change at line 980 ¶ | |||
| instances are equivalent, as the inlined instance example contains | instances are equivalent, as the inlined instance example contains | |||
| the same values defined by the keystore instance referenced by its | the same values defined by the keystore instance referenced by its | |||
| sibling example. | sibling example. | |||
| =============== NOTE: '\' line wrapping per RFC 8792 ================ | =============== NOTE: '\' line wrapping per RFC 8792 ================ | |||
| <keystore-usage | <keystore-usage | |||
| xmlns="https://example.com/ns/example-keystore-usage" | xmlns="https://example.com/ns/example-keystore-usage" | |||
| xmlns:ct="urn:ietf:params:xml:ns:yang:ietf-crypto-types"> | xmlns:ct="urn:ietf:params:xml:ns:yang:ietf-crypto-types"> | |||
| <!-- The following two equivalent examples illustrate the --> | <!-- The following two equivalent examples illustrate the --> | |||
| <!-- "inline-or-keystore-symmetric-key-grouping" grouping: --> | <!-- "inline-or-keystore-symmetric-key-grouping" grouping: --> | |||
| <symmetric-key> | <symmetric-key> | |||
| <name>example 1a</name> | <name>example 1a</name> | |||
| <central-keystore-reference>cleartext-symmetric-key</central-key\ | <central-keystore-reference>cleartext-symmetric-key</central-key\ | |||
| store-reference> | store-reference> | |||
| </symmetric-key> | </symmetric-key> | |||
| <symmetric-key> | <symmetric-key> | |||
| <name>example 1b</name> | <name>example 1b</name> | |||
| <inline-definition> | <inline-definition> | |||
| <key-format>ct:octet-string-key-format</key-format> | <key-format>ct:octet-string-key-format</key-format> | |||
| <cleartext-symmetric-key>BASE64VALUE=</cleartext-symmetric-key> | <cleartext-symmetric-key>BASE64VALUE=</cleartext-symmetric-key> | |||
| </inline-definition> | </inline-definition> | |||
| </symmetric-key> | </symmetric-key> | |||
| <!-- The following two equivalent examples illustrate the --> | <!-- The following two equivalent examples illustrate the --> | |||
| <!-- "inline-or-keystore-asymmetric-key-grouping" grouping: --> | <!-- "inline-or-keystore-asymmetric-key-grouping" grouping: --> | |||
| <asymmetric-key> | <asymmetric-key> | |||
| <name>example 2a</name> | <name>example 2a</name> | |||
| <central-keystore-reference>rsa-asymmetric-key</central-keystore\ | <central-keystore-reference>rsa-asymmetric-key</central-keystore\ | |||
| -reference> | -reference> | |||
| </asymmetric-key> | </asymmetric-key> | |||
| <asymmetric-key> | <asymmetric-key> | |||
| <name>example 2b</name> | <name>example 2b</name> | |||
| <inline-definition> | <inline-definition> | |||
| <public-key-format>ct:subject-public-key-info-format</public-k\ | <public-key-format>ct:subject-public-key-info-format</public-k\ | |||
| ey-format> | ey-format> | |||
| <public-key>BASE64VALUE=</public-key> | <public-key>BASE64VALUE=</public-key> | |||
| <private-key-format>ct:rsa-private-key-format</private-key-for\ | <private-key-format>ct:rsa-private-key-format</private-key-for\ | |||
| mat> | mat> | |||
| <cleartext-private-key>BASE64VALUE=</cleartext-private-key> | <cleartext-private-key>BASE64VALUE=</cleartext-private-key> | |||
| </inline-definition> | </inline-definition> | |||
| </asymmetric-key> | </asymmetric-key> | |||
| <!-- the following two equivalent examples illustrate --> | <!-- The following two equivalent examples illustrate the --> | |||
| <!-- "inline-or-keystore-asymmetric-key-with-certs-grouping": --> | <!-- "inline-or-keystore-asymmetric-key-with-certs-grouping" --> | |||
| <!-- grouping: --> | ||||
| <asymmetric-key-with-certs> | <asymmetric-key-with-certs> | |||
| <name>example 3a</name> | <name>example 3a</name> | |||
| <central-keystore-reference>rsa-asymmetric-key</central-keystore\ | <central-keystore-reference>rsa-asymmetric-key</central-keystore\ | |||
| -reference> | -reference> | |||
| </asymmetric-key-with-certs> | </asymmetric-key-with-certs> | |||
| <asymmetric-key-with-certs> | <asymmetric-key-with-certs> | |||
| <name>example 3b</name> | <name>example 3b</name> | |||
| <inline-definition> | <inline-definition> | |||
| <public-key-format>ct:subject-public-key-info-format</public-k\ | <public-key-format>ct:subject-public-key-info-format</public-k\ | |||
| ey-format> | ey-format> | |||
| <public-key>BASE64VALUE=</public-key> | <public-key>BASE64VALUE=</public-key> | |||
| <private-key-format>ct:rsa-private-key-format</private-key-for\ | <private-key-format>ct:rsa-private-key-format</private-key-for\ | |||
| mat> | mat> | |||
| <cleartext-private-key>BASE64VALUE=</cleartext-private-key> | <cleartext-private-key>BASE64VALUE=</cleartext-private-key> | |||
| <certificates> | <certificates> | |||
| <certificate> | <certificate> | |||
| <name>a locally-defined cert</name> | <name>a locally defined cert</name> | |||
| <cert-data>BASE64VALUE=</cert-data> | <cert-data>BASE64VALUE=</cert-data> | |||
| </certificate> | </certificate> | |||
| </certificates> | </certificates> | |||
| </inline-definition> | </inline-definition> | |||
| </asymmetric-key-with-certs> | </asymmetric-key-with-certs> | |||
| <!-- The following two equivalent examples illustrate --> | ||||
| <!-- "inline-or-keystore-end-entity-cert-with-key-grouping": --> | ||||
| <!-- The following two equivalent examples illustrate the --> | ||||
| <!-- "inline-or-keystore-end-entity-cert-with-key-grouping" --> | ||||
| <!-- grouping: --> | ||||
| <end-entity-cert-with-key> | <end-entity-cert-with-key> | |||
| <name>example 4a</name> | <name>example 4a</name> | |||
| <central-keystore-reference> | <central-keystore-reference> | |||
| <asymmetric-key>rsa-asymmetric-key</asymmetric-key> | <asymmetric-key>rsa-asymmetric-key</asymmetric-key> | |||
| <certificate>ex-rsa-cert</certificate> | <certificate>ex-rsa-cert</certificate> | |||
| </central-keystore-reference> | </central-keystore-reference> | |||
| </end-entity-cert-with-key> | </end-entity-cert-with-key> | |||
| <end-entity-cert-with-key> | <end-entity-cert-with-key> | |||
| <name>example 4b</name> | <name>example 4b</name> | |||
| skipping to change at page 25, line 42 ¶ | skipping to change at line 1084 ¶ | |||
| Following is the "ex-keystore-usage" module's YANG definition: | Following is the "ex-keystore-usage" module's YANG definition: | |||
| module ex-keystore-usage { | module ex-keystore-usage { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "https://example.com/ns/example-keystore-usage"; | namespace "https://example.com/ns/example-keystore-usage"; | |||
| prefix ex-keystore-usage; | prefix ex-keystore-usage; | |||
| import ietf-keystore { | import ietf-keystore { | |||
| prefix ks; | prefix ks; | |||
| reference | reference | |||
| "RFC CCCC: A YANG Data Model for a Keystore"; | "RFC 9642: A YANG Data Model for a Keystore"; | |||
| } | } | |||
| organization | organization | |||
| "Example Corporation"; | "Example Corporation"; | |||
| contact | contact | |||
| "Author: YANG Designer <mailto:yang.designer@example.com>"; | "Author: YANG Designer <mailto:yang.designer@example.com>"; | |||
| description | description | |||
| "This example module illustrates notable groupings defined | "This example module illustrates notable groupings defined | |||
| in the 'ietf-keystore' module."; | in the 'ietf-keystore' module."; | |||
| revision 2024-03-16 { | revision 2024-03-16 { | |||
| description | description | |||
| "Initial version"; | "Initial version"; | |||
| reference | reference | |||
| "RFC CCCC: A YANG Data Model for a Keystore"; | "RFC 9642: A YANG Data Model for a Keystore"; | |||
| } | } | |||
| container keystore-usage { | container keystore-usage { | |||
| description | description | |||
| "An illustration of the various keystore groupings."; | "An illustration of the various keystore groupings."; | |||
| list symmetric-key { | list symmetric-key { | |||
| key "name"; | key "name"; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| skipping to change at page 27, line 5 ¶ | skipping to change at line 1143 ¶ | |||
| } | } | |||
| list asymmetric-key-with-certs { | list asymmetric-key-with-certs { | |||
| key "name"; | key "name"; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "An arbitrary name for this key."; | "An arbitrary name for this key."; | |||
| } | } | |||
| uses ks:inline-or-keystore-asymmetric-key-with-certs-grouping; | uses ks:inline-or-keystore-asymmetric-key-with-certs-grouping; | |||
| description | description | |||
| "An asymmetric key and its associated certs, that may be | "An asymmetric key and its associated certs that may be | |||
| configured locally or be a reference to an asymmetric key | configured locally or be a reference to an asymmetric | |||
| (and its associated certs) in the keystore."; | key (and its associated certs) in the keystore."; | |||
| } | } | |||
| list end-entity-cert-with-key { | list end-entity-cert-with-key { | |||
| key "name"; | key "name"; | |||
| leaf name { | leaf name { | |||
| type string; | type string; | |||
| description | description | |||
| "An arbitrary name for this key."; | "An arbitrary name for this key."; | |||
| } | } | |||
| uses ks:inline-or-keystore-end-entity-cert-with-key-grouping; | uses ks:inline-or-keystore-end-entity-cert-with-key-grouping; | |||
| description | description | |||
| "An end-entity certificate and its associated asymmetric | "An end-entity certificate and its associated asymmetric | |||
| key, that may be configured locally or be a reference | key that may be configured locally or be a reference | |||
| to another certificate (and its associated asymmetric | to another certificate (and its associated asymmetric | |||
| key) in the keystore."; | key) in the keystore."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| 2.3. YANG Module | 2.3. YANG Module | |||
| This YANG module has normative references to [RFC8341] and | This YANG module has normative references to [RFC8341] and [RFC9640]. | |||
| [I-D.ietf-netconf-crypto-types]. | ||||
| <CODE BEGINS> file "ietf-keystore@2024-03-16.yang" | <CODE BEGINS> file "ietf-keystore@2024-03-16.yang" | |||
| module ietf-keystore { | module ietf-keystore { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-keystore"; | namespace "urn:ietf:params:xml:ns:yang:ietf-keystore"; | |||
| prefix ks; | prefix ks; | |||
| import ietf-netconf-acm { | import ietf-netconf-acm { | |||
| prefix nacm; | prefix nacm; | |||
| reference | reference | |||
| "RFC 8341: Network Configuration Access Control Model"; | "RFC 8341: Network Configuration Access Control Model"; | |||
| } | } | |||
| import ietf-crypto-types { | import ietf-crypto-types { | |||
| prefix ct; | prefix ct; | |||
| reference | reference | |||
| "RFC AAAA: YANG Data Types and Groupings for Cryptography"; | "RFC 9640: YANG Data Types and Groupings for Cryptography"; | |||
| } | } | |||
| organization | organization | |||
| "IETF NETCONF (Network Configuration) Working Group"; | "IETF NETCONF (Network Configuration) Working Group"; | |||
| contact | contact | |||
| "WG Web: https://datatracker.ietf.org/wg/netconf | "WG Web: https://datatracker.ietf.org/wg/netconf | |||
| WG List: NETCONF WG list <mailto:netconf@ietf.org> | WG List: NETCONF WG list <mailto:netconf@ietf.org> | |||
| Author: Kent Watsen <mailto:kent+ietf@watsen.net>"; | Author: Kent Watsen <mailto:kent+ietf@watsen.net>"; | |||
| description | description | |||
| "This module defines a 'keystore' to centralize management | "This module defines a 'keystore' to centralize management | |||
| of security credentials. | of security credentials. | |||
| 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 | Copyright (c) 2024 IETF Trust and the persons identified | |||
| as authors of the code. All rights reserved. | as authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with | Redistribution and use in source and binary forms, with | |||
| or without modification, is permitted pursuant to, and | or without modification, is permitted pursuant to, and | |||
| subject to the license terms contained in, the Revised | subject to the license terms contained in, the Revised | |||
| BSD License set forth in Section 4.c of the IETF Trust's | BSD License set forth in Section 4.c of the IETF Trust's | |||
| Legal Provisions Relating to IETF Documents | Legal Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC CCCC | This version of this YANG module is part of RFC 9642 | |||
| (https://www.rfc-editor.org/info/rfcCCCC); see the RFC | (https://www.rfc-editor.org/info/rfc9642); see the RFC | |||
| itself for full legal notices. | itself for full legal notices."; | |||
| 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."; | ||||
| revision 2024-03-16 { | revision 2024-03-16 { | |||
| description | description | |||
| "Initial version"; | "Initial version"; | |||
| reference | reference | |||
| "RFC CCCC: A YANG Data Model for a Keystore"; | "RFC 9642: A YANG Data Model for a Keystore"; | |||
| } | } | |||
| /****************/ | /****************/ | |||
| /* Features */ | /* Features */ | |||
| /****************/ | /****************/ | |||
| feature central-keystore-supported { | feature central-keystore-supported { | |||
| description | description | |||
| "The 'central-keystore-supported' feature indicates that | "The 'central-keystore-supported' feature indicates that | |||
| the server supports the central keystore (i.e., fully | the server supports the central keystore (i.e., fully | |||
| skipping to change at page 29, line 4 ¶ | skipping to change at line 1236 ¶ | |||
| /****************/ | /****************/ | |||
| /* Features */ | /* Features */ | |||
| /****************/ | /****************/ | |||
| feature central-keystore-supported { | feature central-keystore-supported { | |||
| description | description | |||
| "The 'central-keystore-supported' feature indicates that | "The 'central-keystore-supported' feature indicates that | |||
| the server supports the central keystore (i.e., fully | the server supports the central keystore (i.e., fully | |||
| implements the 'ietf-keystore' module)."; | implements the 'ietf-keystore' module)."; | |||
| } | } | |||
| feature inline-definitions-supported { | feature inline-definitions-supported { | |||
| description | description | |||
| "The 'inline-definitions-supported' feature indicates that | "The 'inline-definitions-supported' feature indicates that | |||
| the server supports locally-defined keys."; | the server supports locally defined keys."; | |||
| } | } | |||
| feature asymmetric-keys { | feature asymmetric-keys { | |||
| description | description | |||
| "The 'asymmetric-keys' feature indicates that the server | "The 'asymmetric-keys' feature indicates that the server | |||
| implements the /keystore/asymmetric-keys subtree."; | implements the /keystore/asymmetric-keys subtree."; | |||
| } | } | |||
| feature symmetric-keys { | feature symmetric-keys { | |||
| skipping to change at page 30, line 8 ¶ | skipping to change at line 1289 ¶ | |||
| /*****************/ | /*****************/ | |||
| /* Groupings */ | /* Groupings */ | |||
| /*****************/ | /*****************/ | |||
| grouping encrypted-by-grouping { | grouping encrypted-by-grouping { | |||
| description | description | |||
| "A grouping that defines a 'choice' statement that can be | "A grouping that defines a 'choice' statement that can be | |||
| augmented into the 'encrypted-by' node, present in the | augmented into the 'encrypted-by' node, present in the | |||
| 'symmetric-key-grouping' and 'asymmetric-key-pair-grouping' | 'symmetric-key-grouping' and 'asymmetric-key-pair-grouping' | |||
| groupings defined in RFC AAAA, enabling references to keys | groupings defined in RFC 9640, enabling references to keys | |||
| in the central keystore."; | in the central keystore."; | |||
| choice encrypted-by { | choice encrypted-by { | |||
| nacm:default-deny-write; | nacm:default-deny-write; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "A choice amongst other symmetric or asymmetric keys."; | "A choice amongst other symmetric or asymmetric keys."; | |||
| case central-symmetric-key-ref { | case central-symmetric-key-ref { | |||
| if-feature "central-keystore-supported"; | if-feature "central-keystore-supported"; | |||
| if-feature "symmetric-keys"; | if-feature "symmetric-keys"; | |||
| leaf symmetric-key-ref { | leaf symmetric-key-ref { | |||
| skipping to change at page 30, line 42 ¶ | skipping to change at line 1323 ¶ | |||
| encrypted the associated key."; | encrypted the associated key."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| // *-ref groupings | // *-ref groupings | |||
| grouping central-asymmetric-key-certificate-ref-grouping { | grouping central-asymmetric-key-certificate-ref-grouping { | |||
| description | description | |||
| "Grouping for the reference to a certificate associated | "A grouping for the reference to a certificate associated | |||
| with an asymmetric key stored in the central keystore."; | with an asymmetric key stored in the central keystore."; | |||
| leaf asymmetric-key { | leaf asymmetric-key { | |||
| nacm:default-deny-write; | nacm:default-deny-write; | |||
| if-feature "central-keystore-supported"; | if-feature "central-keystore-supported"; | |||
| if-feature "asymmetric-keys"; | if-feature "asymmetric-keys"; | |||
| type ks:central-asymmetric-key-ref; | type ks:central-asymmetric-key-ref; | |||
| must '../certificate'; | must '../certificate'; | |||
| description | description | |||
| "A reference to an asymmetric key in the keystore."; | "A reference to an asymmetric key in the keystore."; | |||
| } | } | |||
| leaf certificate { | leaf certificate { | |||
| nacm:default-deny-write; | nacm:default-deny-write; | |||
| type leafref { | type leafref { | |||
| path "/ks:keystore/ks:asymmetric-keys/ks:asymmetric-key" | path "/ks:keystore/ks:asymmetric-keys/ks:asymmetric-key" | |||
| + "[ks:name = current()/../asymmetric-key]/" | + "[ks:name = current()/../asymmetric-key]/" | |||
| + "ks:certificates/ks:certificate/ks:name"; | + "ks:certificates/ks:certificate/ks:name"; | |||
| } | } | |||
| must '../asymmetric-key'; | must '../asymmetric-key'; | |||
| description | description | |||
| skipping to change at page 31, line 41 ¶ | skipping to change at line 1369 ¶ | |||
| choice inline-or-keystore { | choice inline-or-keystore { | |||
| nacm:default-deny-write; | nacm:default-deny-write; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "A choice between an inlined definition and a definition | "A choice between an inlined definition and a definition | |||
| that exists in the keystore."; | that exists in the keystore."; | |||
| case inline { | case inline { | |||
| if-feature "inline-definitions-supported"; | if-feature "inline-definitions-supported"; | |||
| container inline-definition { | container inline-definition { | |||
| description | description | |||
| "Container to hold the local key definition."; | "A container to hold the local key definition."; | |||
| uses ct:symmetric-key-grouping; | uses ct:symmetric-key-grouping; | |||
| } | } | |||
| } | } | |||
| case central-keystore { | case central-keystore { | |||
| if-feature "central-keystore-supported"; | if-feature "central-keystore-supported"; | |||
| if-feature "symmetric-keys"; | if-feature "symmetric-keys"; | |||
| leaf central-keystore-reference { | leaf central-keystore-reference { | |||
| type ks:central-symmetric-key-ref; | type ks:central-symmetric-key-ref; | |||
| description | description | |||
| "A reference to an symmetric key that exists in | "A reference to a symmetric key that exists in | |||
| the central keystore."; | the central keystore."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping inline-or-keystore-asymmetric-key-grouping { | grouping inline-or-keystore-asymmetric-key-grouping { | |||
| description | description | |||
| "A grouping for the configuration of an asymmetric key. The | "A grouping for the configuration of an asymmetric key. The | |||
| asymmetric key may be defined inline or as a reference to | asymmetric key may be defined inline or as a reference to | |||
| an asymmetric key stored in the central keystore. | an asymmetric key stored in the central keystore. | |||
| Servers that wish to define alternate keystore locations | Servers that wish to define alternate keystore locations | |||
| SHOULD augment in custom 'case' statements enabling | SHOULD augment in custom 'case' statements enabling | |||
| references to those alternate keystore locations."; | references to those alternate keystore locations."; | |||
| choice inline-or-keystore { | choice inline-or-keystore { | |||
| nacm:default-deny-write; | nacm:default-deny-write; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "A choice between an inlined definition and a definition | "A choice between an inlined definition and a definition | |||
| that exists in the keystore."; | that exists in the keystore."; | |||
| case inline { | case inline { | |||
| if-feature "inline-definitions-supported"; | if-feature "inline-definitions-supported"; | |||
| container inline-definition { | container inline-definition { | |||
| description | description | |||
| "Container to hold the local key definition."; | "A container to hold the local key definition."; | |||
| uses ct:asymmetric-key-pair-grouping; | uses ct:asymmetric-key-pair-grouping; | |||
| } | } | |||
| } | } | |||
| case central-keystore { | case central-keystore { | |||
| if-feature "central-keystore-supported"; | if-feature "central-keystore-supported"; | |||
| if-feature "asymmetric-keys"; | if-feature "asymmetric-keys"; | |||
| leaf central-keystore-reference { | leaf central-keystore-reference { | |||
| type ks:central-asymmetric-key-ref; | type ks:central-asymmetric-key-ref; | |||
| description | description | |||
| "A reference to an asymmetric key that exists in | "A reference to an asymmetric key that exists in | |||
| skipping to change at page 33, line 20 ¶ | skipping to change at line 1445 ¶ | |||
| choice inline-or-keystore { | choice inline-or-keystore { | |||
| nacm:default-deny-write; | nacm:default-deny-write; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "A choice between an inlined definition and a definition | "A choice between an inlined definition and a definition | |||
| that exists in the keystore."; | that exists in the keystore."; | |||
| case inline { | case inline { | |||
| if-feature "inline-definitions-supported"; | if-feature "inline-definitions-supported"; | |||
| container inline-definition { | container inline-definition { | |||
| description | description | |||
| "Container to hold the local key definition."; | "A container to hold the local key definition."; | |||
| uses ct:asymmetric-key-pair-with-certs-grouping; | uses ct:asymmetric-key-pair-with-certs-grouping; | |||
| } | } | |||
| } | } | |||
| case central-keystore { | case central-keystore { | |||
| if-feature "central-keystore-supported"; | if-feature "central-keystore-supported"; | |||
| if-feature "asymmetric-keys"; | if-feature "asymmetric-keys"; | |||
| leaf central-keystore-reference { | leaf central-keystore-reference { | |||
| type ks:central-asymmetric-key-ref; | type ks:central-asymmetric-key-ref; | |||
| description | description | |||
| "A reference to an asymmetric-key (and all of its | "A reference to an asymmetric key (and all of its | |||
| associated certificates) in the keystore, when | associated certificates) in the keystore, when | |||
| this module is implemented."; | this module is implemented."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping inline-or-keystore-end-entity-cert-with-key-grouping { | grouping inline-or-keystore-end-entity-cert-with-key-grouping { | |||
| description | description | |||
| "A grouping for the configuration of an asymmetric key and | "A grouping for the configuration of an asymmetric key and | |||
| skipping to change at page 34, line 11 ¶ | skipping to change at line 1484 ¶ | |||
| choice inline-or-keystore { | choice inline-or-keystore { | |||
| nacm:default-deny-write; | nacm:default-deny-write; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "A choice between an inlined definition and a definition | "A choice between an inlined definition and a definition | |||
| that exists in the keystore."; | that exists in the keystore."; | |||
| case inline { | case inline { | |||
| if-feature "inline-definitions-supported"; | if-feature "inline-definitions-supported"; | |||
| container inline-definition { | container inline-definition { | |||
| description | description | |||
| "Container to hold the local key definition."; | "A container to hold the local key definition."; | |||
| uses ct:asymmetric-key-pair-with-cert-grouping; | uses ct:asymmetric-key-pair-with-cert-grouping; | |||
| } | } | |||
| } | } | |||
| case central-keystore { | case central-keystore { | |||
| if-feature "central-keystore-supported"; | if-feature "central-keystore-supported"; | |||
| if-feature "asymmetric-keys"; | if-feature "asymmetric-keys"; | |||
| container central-keystore-reference { | container central-keystore-reference { | |||
| uses central-asymmetric-key-certificate-ref-grouping; | uses central-asymmetric-key-certificate-ref-grouping; | |||
| description | description | |||
| "A reference to a specific certificate associated with | "A reference to a specific certificate associated with | |||
| an asymmetric key stored in the central keystore."; | an asymmetric key stored in the central keystore."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| // the keystore grouping | // the keystore grouping | |||
| grouping keystore-grouping { | grouping keystore-grouping { | |||
| description | description | |||
| "Grouping definition enables use in other contexts. If ever | "A grouping definition enables use in other contexts. If ever | |||
| done, implementations MUST augment new 'case' statements | done, implementations MUST augment new 'case' statements | |||
| into the various inline-or-keystore 'choice' statements to | into the various inline-or-keystore 'choice' statements to | |||
| supply leafrefs to the model-specific location(s)."; | supply leafrefs to the model-specific location(s)."; | |||
| container asymmetric-keys { | container asymmetric-keys { | |||
| nacm:default-deny-write; | nacm:default-deny-write; | |||
| if-feature "asymmetric-keys"; | if-feature "asymmetric-keys"; | |||
| description | description | |||
| "A list of asymmetric keys."; | "A list of asymmetric keys."; | |||
| list asymmetric-key { | list asymmetric-key { | |||
| key "name"; | key "name"; | |||
| skipping to change at page 35, line 30 ¶ | skipping to change at line 1550 ¶ | |||
| uses ct:symmetric-key-grouping; | uses ct:symmetric-key-grouping; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| /*********************************/ | /*********************************/ | |||
| /* Protocol accessible nodes */ | /* Protocol accessible nodes */ | |||
| /*********************************/ | /*********************************/ | |||
| container keystore { | container keystore { | |||
| if-feature central-keystore-supported; | if-feature "central-keystore-supported"; | |||
| description | description | |||
| "A central keystore containing a list of symmetric keys and | "A central keystore containing a list of symmetric keys and | |||
| a list of asymmetric keys."; | a list of asymmetric keys."; | |||
| nacm:default-deny-write; | nacm:default-deny-write; | |||
| uses keystore-grouping { | uses keystore-grouping { | |||
| augment "symmetric-keys/symmetric-key/key-type/encrypted-" | augment "symmetric-keys/symmetric-key/key-type/encrypted-" | |||
| + "symmetric-key/encrypted-symmetric-key/encrypted-by" { | + "symmetric-key/encrypted-symmetric-key/encrypted-by" { | |||
| description | description | |||
| "Augments in a choice statement enabling the encrypting | "Augments in a choice statement enabling the encrypting | |||
| key to be any other symmetric or asymmetric key in the | key to be any other symmetric or asymmetric key in the | |||
| skipping to change at page 36, line 4 ¶ | skipping to change at line 1573 ¶ | |||
| } | } | |||
| augment "asymmetric-keys/asymmetric-key/private-key-type/" | augment "asymmetric-keys/asymmetric-key/private-key-type/" | |||
| + "encrypted-private-key/encrypted-private-key/" | + "encrypted-private-key/encrypted-private-key/" | |||
| + "encrypted-by" { | + "encrypted-by" { | |||
| description | description | |||
| "Augments in a choice statement enabling the encrypting | "Augments in a choice statement enabling the encrypting | |||
| key to be any other symmetric or asymmetric key in the | key to be any other symmetric or asymmetric key in the | |||
| central keystore."; | central keystore."; | |||
| uses encrypted-by-grouping; | uses encrypted-by-grouping; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 3. Support for Built-in Keys | 3. Support for Built-In Keys | |||
| In some implementations, a server may support keys built into the | In some implementations, a server may support keys built into the | |||
| server. Built-in keys MAY be set during the manufacturing process or | server. Built-in keys MAY be set during the manufacturing process or | |||
| be dynamically generated the first time the server is booted or a | be dynamically generated the first time the server is booted or a | |||
| particular service (e.g., SSH) is enabled. | particular service (e.g., Secure Shell (SSH)) is enabled. | |||
| Built-in keys are "hidden" keys expected to be set by a vendor- | Built-in keys are "hidden" keys expected to be set by a vendor- | |||
| specific process. Any ability for operators to set and/or modify | specific process. Any ability for operators to set and/or modify | |||
| built-in keys is outside the scope of this document. | built-in keys is outside the scope of this document. | |||
| The primary characteristic of the built-in keys is that they are | The primary characteristic of the built-in keys is that they are | |||
| provided by the server, as opposed to configuration. As such, they | provided by the server, as opposed to being configured. As such, | |||
| are present in <operational> (Section 5.3 of [RFC8342]), and <system> | they are present in <operational> (Section 5.3 of [RFC8342]) and | |||
| [I-D.ietf-netmod-system-config], if implemented. | <system> [NETMOD-SYSTEM-CONFIG], if implemented. | |||
| The example below illustrates what the keystore in <operational> | The example below illustrates what the keystore in <operational> | |||
| might look like for a server in its factory default state. Note that | might look like for a server in its factory default state. Note that | |||
| the built-in keys have the "or:origin" annotation value "or:system". | the built-in keys have the "or:origin" annotation value "or:system". | |||
| =============== NOTE: '\' line wrapping per RFC 8792 ================ | =============== NOTE: '\' line wrapping per RFC 8792 ================ | |||
| <keystore xmlns="urn:ietf:params:xml:ns:yang:ietf-keystore" | <keystore xmlns="urn:ietf:params:xml:ns:yang:ietf-keystore" | |||
| xmlns:ct="urn:ietf:params:xml:ns:yang:ietf-crypto-types" | xmlns:ct="urn:ietf:params:xml:ns:yang:ietf-crypto-types" | |||
| xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin" | xmlns:or="urn:ietf:params:xml:ns:yang:ietf-origin" | |||
| skipping to change at page 38, line 35 ¶ | skipping to change at line 1683 ¶ | |||
| <cert-data>BASE64VALUE=</cert-data> | <cert-data>BASE64VALUE=</cert-data> | |||
| </certificate> | </certificate> | |||
| </certificates> | </certificates> | |||
| </asymmetric-key> | </asymmetric-key> | |||
| </asymmetric-keys> | </asymmetric-keys> | |||
| </keystore> | </keystore> | |||
| 4. Encrypting Keys in Configuration | 4. Encrypting Keys in Configuration | |||
| This section describes an approach that enables both the symmetric | This section describes an approach that enables both the symmetric | |||
| and asymmetric keys on a server to be encrypted, such that | and asymmetric keys on a server to be encrypted, such that backup/ | |||
| traditional backup/restore procedures can be used without concern for | restore procedures can be used without concern for raw key data being | |||
| raw key data being compromised when in transit. | compromised when in transit. | |||
| The approach presented in this section is not normative. This | The approach presented in this section is not normative. This | |||
| section answers how a configuration containing secrets that are | section answers how a configuration containing secrets that are | |||
| encrypted by a built-in key (Section 3) can be backup'ed from one | encrypted by a built-in key (Section 3) can be backed up from one | |||
| server and restored on a different server, when each server has | server and restored on a different server when each server has unique | |||
| unique master keys. The API defined by the "ietf-keystore" YANG | primary keys. The API defined by the "ietf-keystore" YANG module | |||
| module presented in this document is sufficient to support the | presented in this document is sufficient to support the workflow | |||
| workflow described in this section. | described in this section. | |||
| 4.1. Key Encryption Key | 4.1. Key Encryption Key | |||
| The ability to encrypt configured keys is predicated on the existence | The ability to encrypt configured keys is predicated on the existence | |||
| of a "key encryption key" (KEK). There may be any number of KEKs in | of a key encryption key (KEK). There may be any number of KEKs in a | |||
| a server. A KEK, by its namesake, is a key that is used to encrypt | server. A KEK, by its namesake, is a key that is used to encrypt | |||
| other keys. A KEK MAY be either a symmetric key or an asymmetric | other keys. A KEK MAY be either a symmetric key or an asymmetric | |||
| key. | key. | |||
| If a KEK is a symmetric key, then the server MUST provide an API for | If a KEK is a symmetric key, then the server MUST provide an API for | |||
| administrators to encrypt other keys without needing to know the | administrators to encrypt other keys without needing to know the | |||
| symmetric key's value. If the KEK is an asymmetric key, then the | symmetric key's value. If the KEK is an asymmetric key, then the | |||
| server SHOULD provide an API enabling the encryption of other keys | server SHOULD provide an API enabling the encryption of other keys | |||
| or, alternatively, assume the administrators can do so themselves | or, alternatively, assume the administrators can do so themselves | |||
| using the asymmetric key's public half. | using the asymmetric key's public half. | |||
| A server MUST possess access to the KEK, or an API using the KEK, so | A server MUST possess access to the KEK, or an API using the KEK, so | |||
| that it can decrypt the other keys in the configuration at runtime. | that it can decrypt the other keys in the configuration at runtime. | |||
| 4.2. Configuring Encrypted Keys | 4.2. Configuring Encrypted Keys | |||
| Each time a new key is configured, it SHOULD be encrypted by a KEK. | Each time a new key is configured, it SHOULD be encrypted by a KEK. | |||
| In "ietf-crypto-types" [I-D.ietf-netconf-crypto-types], the format | In the "ietf-crypto-types" module [RFC9640], the format for encrypted | |||
| for encrypted values is described by identity statements derived from | values is described by identity statements derived from the | |||
| the "symmetrically-encrypted-value-format" and "asymmetrically- | "symmetrically-encrypted-value-format" and "asymmetrically-encrypted- | |||
| encrypted-value-format" identity statements. | value-format" identity statements. | |||
| Implementations of servers implementing the "ietf-keystore" module | Implementations of servers implementing the "ietf-keystore" module | |||
| SHOULD provide an API that simultaneously generates a key and | SHOULD provide an API that simultaneously generates a key and | |||
| encrypts the generated key using a KEK. Thus the cleartext value of | encrypts the generated key using a KEK. Thus, the cleartext value of | |||
| the newly generated key may never be known to the administrators | the newly generated key may never be known to the administrators | |||
| generating the keys. Such API is defined in the "ietf-ssh-common" | generating the keys. Such an API is defined in the "ietf-ssh-common" | |||
| and the "ietf-tls-common" YANG modules defined in | and "ietf-tls-common" YANG modules defined in [RFC9644] and | |||
| [I-D.ietf-netconf-ssh-client-server], and | [RFC9645], respectively. | |||
| [I-D.ietf-netconf-tls-client-server], respectively. | ||||
| In case the server implementation does not provide such an API, then | In case the server implementation does not provide such an API, then | |||
| the generating and encrypting steps MAY be performed outside the | the generating and encrypting steps MAY be performed outside the | |||
| server, e.g., by an administrator with special access control rights | server, e.g., by an administrator with special access control rights | |||
| (e.g., an organization's crypto officer). | (such as an organization's crypto officer). | |||
| In either case, the encrypted key can be configured into the keystore | In either case, the encrypted key can be configured into the keystore | |||
| using either the "encrypted-symmetric-key" (for symmetric keys) or | using either the "encrypted-symmetric-key" (for symmetric keys) or | |||
| the "encrypted-private-key" (for asymmetric keys) nodes. These two | the "encrypted-private-key" (for asymmetric keys) nodes. These two | |||
| nodes contain both the encrypted raw key value as well as a reference | nodes contain both the encrypted raw key value as well as a reference | |||
| to the KEK that encrypted the key. | to the KEK that encrypted the key. | |||
| 4.3. Migrating Configuration to Another Server | 4.3. Migrating Configuration to Another Server | |||
| When a KEK is used to encrypt other keys, migrating the configuration | When a KEK is used to encrypt other keys, migrating the configuration | |||
| to another server is only possible if the second server has the same | to another server is only possible if the second server has the same | |||
| KEK. How the second server comes to have the same KEK is discussed | KEK. How the second server comes to have the same KEK is discussed | |||
| in this section. | in this section. | |||
| In some deployments, mechanisms outside the scope of this document | In some deployments, mechanisms outside the scope of this document | |||
| may be used to migrate a KEK from one server to another. That said, | may be used to migrate a KEK from one server to another. That said, | |||
| beware that the ability to do so typically entails having access to | beware that the ability to do so typically entails having access to | |||
| the first server but, in some scenarios, the first server may no | the first server; however, in some scenarios, the first server may no | |||
| longer be operational. | longer be operational. | |||
| In other deployments, an organization's crypto officer, possessing a | In other deployments, an organization's crypto officer, possessing a | |||
| KEK's cleartext value, configures the same KEK on the second server, | KEK's cleartext value, configures the same KEK on the second server, | |||
| presumably as a hidden key or a key protected by access-control, so | presumably as a hidden key or a key protected by access control, so | |||
| that the cleartext value is not disclosed to regular administrators. | that the cleartext value is not disclosed to regular administrators. | |||
| However, this approach creates high-coupling to and dependency on the | However, this approach creates high coupling to and dependency on the | |||
| crypto officers that does not scale in production environments. | crypto officers that does not scale in production environments. | |||
| In order to decouple the crypto officers from the regular | In order to decouple the crypto officers from the regular | |||
| administrators, a special KEK, called the "master key" (MK), may be | administrators, a special KEK, called the "primary key" (PK), may be | |||
| used. | used. | |||
| A MK is commonly a globally-unique built-in (see Section 3) | A PK is commonly a globally unique built-in (see Section 3) | |||
| asymmetric key. The private raw key value, due to its long lifetime, | asymmetric key. The private raw key value, due to its long lifetime, | |||
| is hidden (i.e., "hidden-private-key" in Section 2.1.4.5. of | is hidden (i.e., "hidden-private-key"; see Section 2.1.4.5. of | |||
| [I-D.ietf-netconf-crypto-types]). The raw public key value is often | [RFC9640]). The raw public key value is often contained in an | |||
| contained in an identity certificate (e.g., IDevID). How to | identity certificate (e.g., IDevID). How to configure a PK during | |||
| configure a MK during the manufacturing process is outside the scope | the manufacturing process is outside the scope of this document. | |||
| of this document. | ||||
| Assuming the server has a MK, the MK can be used to encrypt a "shared | Assuming the server has a PK, the PK can be used to encrypt a "shared | |||
| KEK", which is then used to encrypt the keys configured by regular | KEK", which is then used to encrypt the keys configured by regular | |||
| administrators. | administrators. | |||
| With this extra level of indirection, it is possible for a crypto | With this extra level of indirection, it is possible for a crypto | |||
| officer to encrypt the same KEK for a multiplicity of servers offline | officer to encrypt the same KEK for a multiplicity of servers offline | |||
| using the public key contained in their identity certificates. The | using the public key contained in their identity certificates. The | |||
| crypto officer can then safely handoff the encrypted KEKs to regular | crypto officer can then safely hand off the encrypted KEKs to regular | |||
| administrators responsible for server installations, including | administrators responsible for server installations, including | |||
| migrations. | migrations. | |||
| In order to migrate the configuration from a first server, an | In order to migrate the configuration from a first server, an | |||
| administrator would need to make just a single modification to the | administrator would need to make just a single modification to the | |||
| configuration before loading it onto a second server, which is to | configuration before loading it onto a second server, which is to | |||
| replace the encrypted KEK keystore entry from the first server with | replace the encrypted KEK keystore entry from the first server with | |||
| the encrypted KEK for the second server. Upon doing this, the | the encrypted KEK for the second server. Upon doing this, the | |||
| configuration (containing many encrypted keys) can be loaded into the | configuration (containing many encrypted keys) can be loaded into the | |||
| second server while enabling the second server to decrypt all the | second server while enabling the second server to decrypt all the | |||
| encrypted keys in the configuration. | encrypted keys in the configuration. | |||
| The following diagram illustrates this idea: | The following diagram illustrates this idea: | |||
| +-------------+ +-------------+ | +-------------+ +-------------+ | |||
| | shared KEK | | shared KEK | | | shared KEK | | shared KEK | | |||
| |(unencrypted)|-------------------------------> | (encrypted) | | |(unencrypted)|-------------------------------> | (encrypted) | | |||
| +-------------+ encrypts offline using +-------------+ | +-------------+ encrypts offline using +-------------+ | |||
| ^ each server's MK | | ^ each server's PK | | |||
| | | | | | | |||
| | | | | | | |||
| | possesses \o | | | possesses \o | | |||
| +-------------- |\ | | +-------------- |\ | | |||
| / \ shares with | | / \ shares with | | |||
| crypto +--------------------+ | crypto +--------------------+ | |||
| officer | | officer | | |||
| | | | | |||
| | | | | |||
| +----------------------+ | +----------------------+ | +----------------------+ | +----------------------+ | |||
| | server-1 | | | server-2 | | | server-1 | | | server-2 | | |||
| | configuration | | | configuration | | | configuration | | | configuration | | |||
| | | | | | | | | | | | | |||
| | | | | | | | | | | | | |||
| | +----------------+ | | | +----------------+ | | | +----------------+ | | | +----------------+ | | |||
| | | MK-1 | | | | | MK-2 | | | | | PK-1 | | | | | PK-2 | | | |||
| | | (hidden) | | | | | (hidden) | | | | | (hidden) | | | | | (hidden) | | | |||
| | +----------------+ | | | +----------------+ | | | +----------------+ | | | +----------------+ | | |||
| | ^ | | | ^ | | | ^ | | | ^ | | |||
| | | | | | | | | | | | | | | | | |||
| | | | | | | | | | | | | | | | | |||
| | | encrypted | | | | encrypted | | | | encrypted | | | | encrypted | | |||
| | | by | | | | by | | | | by | | | | by | | |||
| | | | | | | | | | | | | | | | | |||
| | | | | | | | | | | | | | | | | |||
| | +----------------+ | | | +----------------+ | | | +----------------+ | | | +----------------+ | | |||
| skipping to change at page 43, line 13 ¶ | skipping to change at line 1850 ¶ | |||
| +----------------------+ +----------------------+ | +----------------------+ +----------------------+ | |||
| 5. Security Considerations | 5. Security Considerations | |||
| 5.1. Security of Data at Rest and in Motion | 5.1. Security of Data at Rest and in Motion | |||
| The YANG module defined in this document defines a mechanism called a | The YANG module defined in this document defines a mechanism called a | |||
| "keystore" that intends to protect its contents from unauthorized | "keystore" that intends to protect its contents from unauthorized | |||
| disclosure and modification. | disclosure and modification. | |||
| In order to satisfy the expectations of a "keystore", it is | In order to satisfy the expectations of a keystore, it is RECOMMENDED | |||
| RECOMMENDED that server implementations ensure that the keystore | that server implementations ensure that the keystore contents are | |||
| contents are encrypted when persisted to non-volatile memory, and | encrypted when persisted to non-volatile memory and that the keystore | |||
| ensure that the keystore contents that have been decrypted in | contents that have been decrypted in volatile memory are zeroized | |||
| volatile memory are zeroized when not in use. | when not in use. | |||
| The keystore contents may be encrypted either by encrypting the | The keystore contents may be encrypted by either encrypting the | |||
| contents individually (e.g., using the "encrypted" value formats) or, | contents individually (e.g., using the "encrypted" value formats) or | |||
| in case cleartext values are used (which is NOT RECOMMENDED per | using persistence-layer-level encryption. If storing cleartext | |||
| Section 3.5 of [I-D.ietf-netconf-crypto-types]), then, e.g., disk- | values (which is NOT RECOMMENDED per Section 3.5 of [RFC9640]), then | |||
| level encryption may be used. | persistence-layer-level encryption SHOULD be used to protect the data | |||
| at rest. | ||||
| If the keystore contents are not encrypted when persisted, then | If the keystore contents are not encrypted when persisted, then | |||
| server implementations MUST ensure the persisted storage is | server implementations MUST ensure the persisted storage is | |||
| inaccessible. | inaccessible. | |||
| 5.2. Unconstrained Private Key Usage | 5.2. Unconstrained Private Key Usage | |||
| This module enables the configuration of private keys without | This module enables the configuration of private keys without | |||
| constraints on their usage, e.g., what operations the key is allowed | constraints on their usage, e.g., what operations the key is allowed | |||
| to be used for (e.g., signature, decryption, both). | to be used for (such as signature, decryption, or both). | |||
| This module also does not constrain the usage of the associated | This module also does not constrain the usage of the associated | |||
| public keys, other than in the context of a configured certificate | public keys other than in the context of a configured certificate | |||
| (e.g., an identity certificate), in which case the key usage is | (e.g., an identity certificate), in which case the key usage is | |||
| constrained by the certificate. | constrained by the certificate. | |||
| 5.3. Considerations for the "ietf-keystore" YANG Module | 5.3. Security Considerations for the "ietf-keystore" YANG Module | |||
| This section follows the template defined in Section 3.7.1 of | This section is modeled after the template defined in Section 3.7.1 | |||
| [RFC8407]. | of [RFC8407]. | |||
| The YANG module defined in this document is designed to be accessed | The ietf-keystore YANG module defines a data model that is designed | |||
| via YANG based management protocols, such as NETCONF [RFC6241] and | to be accessed via YANG-based management protocols, such as NETCONF | |||
| RESTCONF [RFC8040]. Both of these protocols have mandatory-to- | [RFC6241] and RESTCONF [RFC8040]. These protocols have mandatory-to- | |||
| implement secure transport layers (e.g., SSH, TLS) with mutual | implement secure transport layers (e.g., SSH [RFC4252], TLS | |||
| [RFC8446], and QUIC [RFC9000]) and mandatory-to-implement mutual | ||||
| authentication. | authentication. | |||
| The Network Access Control Model (NACM) [RFC8341] provides the means | The Network Configuration Access Control Model (NACM) [RFC8341] | |||
| to restrict access for particular users to a pre-configured subset of | provides the means to restrict access for particular users to a | |||
| all available protocol operations and content. | preconfigured subset of all available protocol operations and | |||
| content. | ||||
| Please be aware that this YANG module uses groupings from other YANG | Please be aware that this YANG module uses groupings from other YANG | |||
| modules that define nodes that may be considered sensitive or | modules that define nodes that may be considered sensitive or | |||
| vulnerable in network environments. Please review the Security | vulnerable in network environments. Please review the Security | |||
| Considerations for dependent YANG modules for information as to which | Considerations for dependent YANG modules for information as to which | |||
| nodes may be considered sensitive or vulnerable in network | nodes may be considered sensitive or vulnerable in network | |||
| environments. | environments. | |||
| Some of the readable data nodes defined in this YANG module may be | Some of the readable data nodes in this YANG module may be considered | |||
| considered sensitive or vulnerable in some network environments. It | sensitive or vulnerable in some network environments. It is thus | |||
| is thus important to control read access (e.g., via get, get-config, | important to control read access (e.g., via get, get-config, or | |||
| or notification) to these data nodes. The following subtrees and | notification) to these data nodes. These are the subtrees and data | |||
| data nodes have particular sensitivity/vulnerability: | nodes and their sensitivity/vulnerability: | |||
| * The "cleartext-symmetric-key" node: | ||||
| The "cleartext-symmetric-key" node, imported from the | ||||
| "symmetric-key-grouping" grouping defined in | ||||
| [I-D.ietf-netconf-crypto-types] is additionally sensitive to | ||||
| read operations such that, in normal use cases, it should never | ||||
| be returned to a client. For this reason, the NACM extension | ||||
| "default-deny-all" was applied to it in | ||||
| [I-D.ietf-netconf-crypto-types]. | ||||
| * The "cleartext-private-key" node: | The "cleartext-symmetric-key" node: | |||
| This node, imported from the "symmetric-key-grouping" grouping | ||||
| defined in [RFC9640], is additionally sensitive to read operations | ||||
| such that, in normal use cases, it should never be returned to a | ||||
| client. For this reason, the NACM extension "default-deny-all" | ||||
| was applied to it in [RFC9640]. | ||||
| The "cleartext-private-key" node defined in the "asymmetric- | The "cleartext-private-key" node: | |||
| key-pair-grouping" grouping defined in | This node, defined in the "asymmetric-key-pair-grouping" grouping | |||
| [I-D.ietf-netconf-crypto-types] is additionally sensitive to | in [RFC9640], is additionally sensitive to read operations such | |||
| read operations such that, in normal use cases, it should never | that, in normal use cases, it should never be returned to a | |||
| be returned to a client. For this reason, the NACM extension | client. For this reason, the NACM extension "default-deny-all" is | |||
| "default-deny-all" is applied to it in | applied to it in [RFC9640]. | |||
| [I-D.ietf-netconf-crypto-types]. | ||||
| All the writable data nodes defined by this module, both in the | All the writable data nodes defined by this YANG module, both in the | |||
| "grouping" statements as well as the protocol-accessible "keystore" | "grouping" statements as well as the protocol-accessible "keystore" | |||
| instance, may be considered sensitive or vulnerable in some network | instance, may be considered sensitive or vulnerable in some network | |||
| environments. For instance, any modification to a key or reference | environments. For instance, any modification to a key or reference | |||
| to a key may dramatically alter the implemented security policy. For | to a key may dramatically alter the implemented security policy. For | |||
| this reason, the NACM extension "default-deny-write" has been set for | this reason, the NACM extension "default-deny-write" has been set for | |||
| all data nodes defined in this module. | all data nodes defined in this module. | |||
| This module does not define any "rpc" or "action" statements, and | This YANG module does not define any "rpc" or "action" statements, | |||
| thus the security considerations for such is not provided here. | and thus the security considerations for such is not provided here. | |||
| Built-in key types SHOULD be either hidden and/or encrypted (not | Built-in key types SHOULD be hidden and/or encrypted (not cleartext). | |||
| cleartext). If this is not possible, access control mechanisms like | If this is not possible, access control mechanisms like NACM SHOULD | |||
| NACM SHOULD be used to limit access to the key's secret data to only | be used to limit access to the key's secret data to only the most | |||
| the most trusted authorized clients (e.g., belonging to an | trusted authorized clients (e.g., belonging to an organization's | |||
| organization’s crypto officer). | crypto officer). | |||
| 6. IANA Considerations | 6. IANA Considerations | |||
| 6.1. The "IETF XML" Registry | 6.1. The IETF XML Registry | |||
| This document registers one URI in the "ns" subregistry of the IETF | IANA has registered the following URI in the "ns" registry of the | |||
| XML Registry [RFC3688]. Following the format in [RFC3688], the | "IETF XML Registry" [RFC3688]. | |||
| following registration is requested: | ||||
| URI: urn:ietf:params:xml:ns:yang:ietf-keystore | URI: urn:ietf:params:xml:ns:yang:ietf-keystore | |||
| Registrant Contact: The IESG | Registrant Contact: The IESG | |||
| XML: N/A, the requested URI is an XML namespace. | XML: N/A; the requested URI is an XML namespace. | |||
| 6.2. The "YANG Module Names" Registry | 6.2. The YANG Module Names Registry | |||
| This document registers one YANG module in the YANG Module Names | IANA has registered the following YANG module in the "YANG Module | |||
| registry [RFC6020]. Following the format in [RFC6020], the following | Names" registry defined in [RFC6020]. | |||
| registration is requested: | ||||
| name: ietf-keystore | Name: ietf-keystore | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-keystore | Maintained by IANA: N | |||
| prefix: ks | Namespace: urn:ietf:params:xml:ns:yang:ietf-keystore | |||
| reference: RFC CCCC | Prefix: ks | |||
| Reference: RFC 9642 | ||||
| 7. References | 7. References | |||
| 7.1. Normative References | 7.1. Normative References | |||
| [I-D.ietf-netconf-crypto-types] | ||||
| Watsen, K., "YANG Data Types and Groupings for | ||||
| Cryptography", Work in Progress, Internet-Draft, draft- | ||||
| ietf-netconf-crypto-types-33, 1 March 2024, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | ||||
| crypto-types-33>. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC4252] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) | ||||
| Authentication Protocol", RFC 4252, DOI 10.17487/RFC4252, | ||||
| January 2006, <https://www.rfc-editor.org/info/rfc4252>. | ||||
| [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
| the Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
| DOI 10.17487/RFC6020, October 2010, | DOI 10.17487/RFC6020, October 2010, | |||
| <https://www.rfc-editor.org/info/rfc6020>. | <https://www.rfc-editor.org/info/rfc6020>. | |||
| [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | ||||
| and A. Bierman, Ed., "Network Configuration Protocol | ||||
| (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | ||||
| <https://www.rfc-editor.org/info/rfc6241>. | ||||
| [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
| RFC 7950, DOI 10.17487/RFC7950, August 2016, | RFC 7950, DOI 10.17487/RFC7950, August 2016, | |||
| <https://www.rfc-editor.org/info/rfc7950>. | <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>. | ||||
| [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration | [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration | |||
| Access Control Model", STD 91, RFC 8341, | Access Control Model", STD 91, RFC 8341, | |||
| DOI 10.17487/RFC8341, March 2018, | DOI 10.17487/RFC8341, March 2018, | |||
| <https://www.rfc-editor.org/info/rfc8341>. | <https://www.rfc-editor.org/info/rfc8341>. | |||
| [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>. | ||||
| [RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | ||||
| Multiplexed and Secure Transport", RFC 9000, | ||||
| DOI 10.17487/RFC9000, May 2021, | ||||
| <https://www.rfc-editor.org/info/rfc9000>. | ||||
| [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>. | ||||
| 7.2. Informative References | 7.2. Informative References | |||
| [I-D.ietf-netconf-http-client-server] | [HTTP-CLIENT-SERVER] | |||
| Watsen, K., "YANG Groupings for HTTP Clients and HTTP | Watsen, K., "YANG Groupings for HTTP Clients and HTTP | |||
| Servers", Work in Progress, Internet-Draft, draft-ietf- | Servers", Work in Progress, Internet-Draft, draft-ietf- | |||
| netconf-http-client-server-19, 1 March 2024, | netconf-http-client-server-23, 15 August 2024, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | ||||
| http-client-server-19>. | ||||
| [I-D.ietf-netconf-keystore] | ||||
| Watsen, K., "A YANG Data Model for a Keystore and Keystore | ||||
| Operations", Work in Progress, Internet-Draft, draft-ietf- | ||||
| netconf-keystore-34, 1 March 2024, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | |||
| keystore-34>. | http-client-server-23>. | |||
| [I-D.ietf-netconf-netconf-client-server] | [NETCONF-CLIENT-SERVER] | |||
| Watsen, K., "NETCONF Client and Server Models", Work in | Watsen, K., "NETCONF Client and Server Models", Work in | |||
| Progress, Internet-Draft, draft-ietf-netconf-netconf- | Progress, Internet-Draft, draft-ietf-netconf-netconf- | |||
| client-server-35, 1 March 2024, | client-server-37, 14 August 2024, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | |||
| netconf-client-server-35>. | netconf-client-server-37>. | |||
| [I-D.ietf-netconf-restconf-client-server] | [NETMOD-SYSTEM-CONFIG] | |||
| Ma, Q., Ed., Wu, Q., and C. Feng, "System-defined | ||||
| Configuration", Work in Progress, Internet-Draft, draft- | ||||
| ietf-netmod-system-config-09, 29 September 2024, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netmod- | ||||
| system-config-09>. | ||||
| [RESTCONF-CLIENT-SERVER] | ||||
| Watsen, K., "RESTCONF Client and Server Models", Work in | Watsen, K., "RESTCONF Client and Server Models", Work in | |||
| Progress, Internet-Draft, draft-ietf-netconf-restconf- | Progress, Internet-Draft, draft-ietf-netconf-restconf- | |||
| client-server-35, 1 March 2024, | client-server-38, 14 August 2024, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | ||||
| restconf-client-server-35>. | ||||
| [I-D.ietf-netconf-ssh-client-server] | ||||
| Watsen, K., "YANG Groupings for SSH Clients and SSH | ||||
| Servers", Work in Progress, Internet-Draft, draft-ietf- | ||||
| netconf-ssh-client-server-39, 1 March 2024, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | ||||
| ssh-client-server-39>. | ||||
| [I-D.ietf-netconf-tcp-client-server] | ||||
| Watsen, K. and M. Scharf, "YANG Groupings for TCP Clients | ||||
| and TCP Servers", Work in Progress, Internet-Draft, draft- | ||||
| ietf-netconf-tcp-client-server-23, 1 March 2024, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | ||||
| tcp-client-server-23>. | ||||
| [I-D.ietf-netconf-tls-client-server] | ||||
| Watsen, K., "YANG Groupings for TLS Clients and TLS | ||||
| Servers", Work in Progress, Internet-Draft, draft-ietf- | ||||
| netconf-tls-client-server-40, 1 March 2024, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | ||||
| tls-client-server-40>. | ||||
| [I-D.ietf-netconf-trust-anchors] | ||||
| Watsen, K., "A YANG Data Model for a Truststore", Work in | ||||
| Progress, Internet-Draft, draft-ietf-netconf-trust- | ||||
| anchors-27, 1 March 2024, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | <https://datatracker.ietf.org/doc/html/draft-ietf-netconf- | |||
| trust-anchors-27>. | restconf-client-server-38>. | |||
| [I-D.ietf-netmod-system-config] | ||||
| Ma, Q., Wu, Q., and C. Feng, "System-defined | ||||
| Configuration", Work in Progress, Internet-Draft, draft- | ||||
| ietf-netmod-system-config-05, 21 February 2024, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netmod- | ||||
| system-config-05>. | ||||
| [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
| DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
| <https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
| [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | |||
| and A. Bierman, Ed., "Network Configuration Protocol | Interchange Format", STD 90, RFC 8259, | |||
| (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | DOI 10.17487/RFC8259, December 2017, | |||
| <https://www.rfc-editor.org/info/rfc6241>. | <https://www.rfc-editor.org/info/rfc8259>. | |||
| [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>. | ||||
| [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | |||
| BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | |||
| <https://www.rfc-editor.org/info/rfc8340>. | <https://www.rfc-editor.org/info/rfc8340>. | |||
| [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | |||
| and R. Wilton, "Network Management Datastore Architecture | and R. Wilton, "Network Management Datastore Architecture | |||
| (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, | (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, | |||
| <https://www.rfc-editor.org/info/rfc8342>. | <https://www.rfc-editor.org/info/rfc8342>. | |||
| [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of | [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of | |||
| Documents Containing YANG Data Models", BCP 216, RFC 8407, | Documents Containing YANG Data Models", BCP 216, RFC 8407, | |||
| DOI 10.17487/RFC8407, October 2018, | DOI 10.17487/RFC8407, October 2018, | |||
| <https://www.rfc-editor.org/info/rfc8407>. | <https://www.rfc-editor.org/info/rfc8407>. | |||
| [Std-802.1AR-2018] | [RFC8792] Watsen, K., Auerswald, E., Farrel, A., and Q. Wu, | |||
| IEEE SA-Standards Board, "IEEE Standard for Local and | "Handling Long Lines in Content of Internet-Drafts and | |||
| metropolitan area networks - Secure Device Identity", | RFCs", RFC 8792, DOI 10.17487/RFC8792, June 2020, | |||
| August 2018, | <https://www.rfc-editor.org/info/rfc8792>. | |||
| <https://standards.ieee.org/standard/802_1AR-2018.html>. | ||||
| Appendix A. Change Log | ||||
| A.1. 00 to 01 | ||||
| * Replaced the 'certificate-chain' structures with PKCS#7 | ||||
| structures. (Issue #1) | ||||
| * Added 'private-key' as a configurable data node, and removed the | ||||
| 'generate-private-key' and 'load-private-key' actions. (Issue #2) | ||||
| * Moved 'user-auth-credentials' to the ietf-ssh-client module. | ||||
| (Issues #4 and #5) | ||||
| A.2. 01 to 02 | ||||
| * Added back 'generate-private-key' action. | ||||
| * Removed 'RESTRICTED' enum from the 'private-key' leaf type. | ||||
| * Fixed up a few description statements. | ||||
| A.3. 02 to 03 | ||||
| * Changed draft's title. | ||||
| * Added missing references. | ||||
| * Collapsed sections and levels. | ||||
| * Added RFC 8174 to Requirements Language Section. | ||||
| * Renamed 'trusted-certificates' to 'pinned-certificates'. | ||||
| * Changed 'public-key' from config false to config true. | ||||
| * Switched 'host-key' from OneAsymmetricKey to definition from RFC | ||||
| 4253. | ||||
| A.4. 03 to 04 | ||||
| * Added typedefs around leafrefs to common keystore paths | ||||
| * Now tree diagrams reference ietf-netmod-yang-tree-diagrams | ||||
| * Removed Design Considerations section | ||||
| * Moved key and certificate definitions from data tree to groupings | ||||
| A.5. 04 to 05 | ||||
| * Removed trust anchors (now in their own draft) | ||||
| * Added back global keystore structure | ||||
| * Added groupings enabling keys to either be locally defined or a | ||||
| reference to the keystore. | ||||
| A.6. 05 to 06 | ||||
| * Added feature "local-keys-supported" | ||||
| * Added nacm:default-deny-all and nacm:default-deny-write | ||||
| * Renamed generate-asymmetric-key to generate-hidden-key | ||||
| * Added an install-hidden-key action | ||||
| * Moved actions inside fo the "asymmetric-key" container | ||||
| * Moved some groupings to draft-ietf-netconf-crypto-types | ||||
| A.7. 06 to 07 | ||||
| * Removed a "require-instance false" | ||||
| * Clarified some description statements | ||||
| * Improved the keystore-usage examples | ||||
| A.8. 07 to 08 | ||||
| * Added "inline-definition" containers to avoid posibility of the | ||||
| action/notification statements being under a "case" statement. | ||||
| * Updated copyright date, boilerplate template, affiliation, folding | ||||
| algorithm, and reformatted the YANG module. | ||||
| A.9. 08 to 09 | ||||
| * Added a 'description' statement to the 'must' in the /keystore/ | ||||
| asymmetric-key node explaining that the descendant values may | ||||
| exist in <operational> only, and that implementation MUST assert | ||||
| that the values are either configured or that they exist in | ||||
| <operational>. | ||||
| * Copied above 'must' statement (and description) into the inline- | ||||
| or-keystore-asymmetric-key-grouping, inline-or-keystore- | ||||
| asymmetric-key-with-certs-grouping, and inline-or-keystore-end- | ||||
| entity-cert-with-key-grouping statements. | ||||
| A.10. 09 to 10 | ||||
| * Updated draft title to match new truststore draft title | ||||
| * Moved everything under a top-level 'grouping' to enable use in | ||||
| other contexts. | ||||
| * Renamed feature from 'local-keys-supported' to 'inline- | ||||
| definitions-supported' (same name used in truststore) | ||||
| * Removed the either-all-or-none 'must' expressions for the key's | ||||
| 3-tuple values (since the values are now 'mandatory true' in | ||||
| crypto-types) | ||||
| * Example updated to reflect 'mandatory true' change in crypto-types | ||||
| draft | ||||
| A.11. 10 to 11 | ||||
| * Replaced typedef asymmetric-key-certificate-ref with grouping | ||||
| asymmetric-key-certificate-ref-grouping. | ||||
| * Added feature feature 'key-generation'. | ||||
| * Cloned groupings symmetric-key-grouping, asymmetric-key-pair- | ||||
| grouping, asymmetric-key-pair-with-cert-grouping, and asymmetric- | ||||
| key-pair-with-certs-grouping from crypto-keys, augmenting into | ||||
| each new case statements for values that have been encrypted by | ||||
| other keys in the keystore. Refactored keystore model to use | ||||
| these groupings. | ||||
| * Added new 'symmetric-keys' lists, as a sibling to the existing | ||||
| 'asymmetric-keys' list. | ||||
| * Added RPCs (not actions) 'generate-symmetric-key' and 'generate- | ||||
| asymmetric-key' to *return* a (potentially encrypted) key. | ||||
| A.12. 11 to 12 | ||||
| * Updated to reflect crypto-type's draft using enumerations over | ||||
| identities. | ||||
| * Added examples for the 'generate-symmetric-key' and 'generate- | ||||
| asymmetric-key' RPCs. | ||||
| * Updated the Introduction section. | ||||
| A.13. 12 to 13 | ||||
| * Updated examples to incorporate new "key-format" identities. | ||||
| * Made the two "generate-*-key" RPCs be "action" statements instead. | ||||
| A.14. 13 to 14 | ||||
| * Updated YANG module and examples to incorporate the new | ||||
| iana-*-algorithm modules in the crypto-types draft. | ||||
| A.15. 14 to 15 | ||||
| * Added new "Support for Built-in Keys" section. | ||||
| * Added 'must' expressions asserting that the 'key-format' leaf | ||||
| whenever an encrypted key is specified. | ||||
| * Added inline-or-keystore-symmetric-key-grouping for PSK support. | ||||
| A.16. 15 to 16 | ||||
| * Moved the generate key actions to ietf-crypt-types as RPCs, which | ||||
| are augmented by ietf-keystore to support encrypted keys. | ||||
| Examples updated accordingly. | ||||
| * Added a SSH certificate-based key (RFC 6187) and a raw private key | ||||
| to the example instance document (partly so they could be | ||||
| referenced by examples in the SSH and TLS client/server drafts. | ||||
| A.17. 16 to 17 | ||||
| * Removed augments to the "generate-symmetric-key" and "generate- | ||||
| asymmetric-key" groupings. | ||||
| * Removed "generate-symmetric-key" and "generate-asymmetric-key" | ||||
| examples. | ||||
| * Removed the "algorithm" nodes from remaining examples. | ||||
| * Updated the "Support for Built-in Keys" section. | ||||
| * Added new section "Encrypting Keys in Configuration". | ||||
| * Added a "Note to Reviewers" note to first page. | ||||
| A.18. 17 to 18 | ||||
| * Removed dangling/unnecessary ref to RFC 8342. | ||||
| * r/MUST/SHOULD/ wrt strength of keys being configured over | ||||
| transports. | ||||
| * Added an example for the "certificate-expiration" notification. | ||||
| * Clarified that OS MAY have a multiplicity of underlying keystores | ||||
| and/or TPMs. | ||||
| * Clarified expected behavior for "built-in" keys in <operational> | ||||
| * Clarified the "Migrating Configuration to Another Server" section. | ||||
| * Expanded "Data Model Overview section(s) [remove "wall" of tree | ||||
| diagrams]. | ||||
| * Updated the Security Considerations section. | ||||
| A.19. 18 to 19 | ||||
| * Updated examples to reflect new "cleartext-" prefix in the crypto- | ||||
| types draft. | ||||
| A.20. 19 to 20 | ||||
| * Addressed SecDir comments from Magnus Nystroem and Sandra Murphy. | ||||
| A.21. 20 to 21 | ||||
| * Added a "Unconstrained Private Key Usage" Security Consideration | ||||
| to address concern raised by SecDir. | ||||
| * (Editorial) Removed the output of "grouping" statements in the | ||||
| tree diagrams for the "ietf-keystore" and "ex-keystore-usage" | ||||
| modules. | ||||
| * Addressed comments raised by YANG Doctor. | ||||
| A.22. 21 to 22 | ||||
| * Added prefixes to 'path' statements per trust-anchors/issues/1 | ||||
| * Renamed feature "keystore-supported" to "central-keystore- | ||||
| supported". | ||||
| * Associated with above, generally moved text to refer to a | ||||
| "central" keystore. | ||||
| * Aligned modules with `pyang -f` formatting. | ||||
| * Fixed nits found by YANG Doctor reviews. | ||||
| A.23. 22 to 23 | ||||
| * Updated 802.1AR ref to latest version | ||||
| * Replaced "base64encodedvalue==" with "BASE64VALUE=" in examples. | ||||
| * Minor editorial nits | ||||
| A.24. 23 to 24 | ||||
| * Added features "asymmetric-keys" and "symmetric-keys" | ||||
| * fixup the 'WG Web' and 'WG List' lines in YANG module(s) | ||||
| * fixup copyright (i.e., s/Simplified/Revised/) in YANG module(s) | ||||
| * Added Informative reference to ma-netmod-with-system | ||||
| A.25. 24 to 25 | ||||
| * Added a "term" for "key" (IEEE liaison). | ||||
| * Clarified draft text to ensure proper use of the "key" term. | ||||
| (IEEE liaison) | ||||
| * Added statement that built-in keys SHOULD NOT be cleartext. (IEEE | ||||
| liaison) | ||||
| * Added "if-feature central-keystore-supported" to top-level | ||||
| "keystore" container. | ||||
| A.26. 25 to 26 | ||||
| * Updated per Shepherd reviews impacting the suite of drafts. | ||||
| A.27. 26 to 27 | ||||
| * Updated per Shepherd reviews impacting the suite of drafts. | ||||
| A.28. 27 to 28 | ||||
| * Updated per Tom Petch review. | ||||
| * s/local/inline/ in feature names, grouping names, and node names. | ||||
| * Removed special handling text for built-in keys | ||||
| * Updated section on built-in keys to read almost the same as the | ||||
| section in the trust-anchors draft. | ||||
| A.29. 28 to 29 | ||||
| * Addresses AD review comments. | ||||
| * Added note to Editor to fix line foldings. | ||||
| * Renamed "keystore" to "central keystore" throughout. | ||||
| * Renamed "encrypted-by-choice-grouping" to "encrypted-by-grouping". | ||||
| * Removed "public-key-format" and "public-key" nodes from examples. | ||||
| A.30. 29 to 30 | ||||
| * Addresses Gen-ART review by Reese Enghardt. | ||||
| * Addresses review by Tom Petch. | ||||
| A.31. 30 to 31 | ||||
| * Addresses 1st-round of IESG reviews. | ||||
| A.32. 31 to 33 | ||||
| * Addresses issues found in OpsDir review of the ssh-client-server | ||||
| draft. | ||||
| * Renamed Security Considerations section s/Template for/ | ||||
| Considerations for/ | ||||
| * s/defines/presents/ in a few places. | [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>. | ||||
| * Add refs to where the 'operational' and 'system' datastores are | [RFC9643] Watsen, K. and M. Scharf, "YANG Groupings for TCP Clients | |||
| defined. | and TCP Servers", RFC 9643, DOI 10.17487/RFC9643, October | |||
| 2024, <https://www.rfc-editor.org/info/rfc9643>. | ||||
| A.33. 33 to 34 | [RFC9644] Watsen, K., "YANG Groupings for SSH Clients and SSH | |||
| Servers", RFC 9644, DOI 10.17487/RFC9644, October 2024, | ||||
| <https://www.rfc-editor.org/info/rfc9644>. | ||||
| * Nothing changed. Only bumped for automation... | [RFC9645] Watsen, K., "YANG Groupings for TLS Clients and TLS | |||
| Servers", RFC 9645, DOI 10.17487/RFC9645, October 2024, | ||||
| <https://www.rfc-editor.org/info/rfc9645>. | ||||
| A.34. 34 to 35 | [Std-802.1AR-2018] | |||
| IEEE, "IEEE Standard for Local and Metropolitan Area | ||||
| Networks - Secure Device Identity", IEEE Std 802.1AR-2018, | ||||
| DOI 10.1109/IEEESTD.2018.8423794, August 2018, | ||||
| <https://standards.ieee.org/standard/802_1AR-2018.html>. | ||||
| * Address Roman Danyliw's comments. | [W3C.REC-xml-20081126] | |||
| Bray, T., Paoli, J., Sperberg-McQueen, C. M., Maler, E., | ||||
| and F. Yergeau, "Extensible Markup Language (XML) 1.0 | ||||
| (Fifth Edition)", W3C Recommendation REC-xml-20081126, | ||||
| November 2008, <https://www.w3.org/TR/xml/>. | ||||
| Acknowledgements | Acknowledgements | |||
| The authors would like to thank the following for lively discussions | The authors would like to thank the following for lively discussions | |||
| on list and in the halls (ordered by first name): Alan Luchuk, Andy | on list and in the halls (ordered by first name): Alan Luchuk, Andy | |||
| Bierman, Benoit Claise, Bert Wijnen, Balázs Kovács, David Lamparter, | Bierman, Balázs Kovács, Benoit Claise, Bert Wijnen, David Lamparter, | |||
| Eric Voit, Éric Vyncke, Francesca Palombini, Ladislav Lhotka, Liang | Eric Voit, Éric Vyncke, Francesca Palombini, Jürgen Schönwälder, | |||
| Xia, Jürgen Schönwälder, Mahesh Jethanandani, Magnus Nyström, Martin | Ladislav Lhotka, Liang Xia, Magnus Nyström, Mahesh Jethanandani, | |||
| Björklund, Mehmet Ersue, Murray Kucherawy, Paul Wouters, Phil Shafer, | Martin Björklund, Mehmet Ersue, Murray Kucherawy, Paul Wouters, Phil | |||
| Qin Wu, Radek Krejci, Ramkumar Dhanapal, Reese Enghardt, Reshad | Shafer, Qin Wu, Radek Krejci, Ramkumar Dhanapal, Reese Enghardt, | |||
| Rahman, Rob Wilton, Roman Danyliw, Sandra Murphy, Sean Turner, Tom | Reshad Rahman, Rob Wilton, Roman Danyliw, Sandra Murphy, Sean Turner, | |||
| Petch, Warren Kumari, and Zaheduzzaman Sarker. | Tom Petch, Warren Kumari, and Zaheduzzaman Sarker. | |||
| Author's Address | Author's Address | |||
| Kent Watsen | Kent Watsen | |||
| Watsen Networks | Watsen Networks | |||
| Email: kent+ietf@watsen.net | Email: kent+ietf@watsen.net | |||
| End of changes. 139 change blocks. | ||||
| 776 lines changed or deleted | 360 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||