draft-ietf-rtgwg-yang-key-chain-14.txt   draft-ietf-rtgwg-yang-key-chain-15.txt 
Network Working Group A. Lindem, Ed. Network Working Group A. Lindem, Ed.
Internet-Draft Cisco Systems Internet-Draft Cisco Systems
Intended status: Standards Track Y. Qu Intended status: Standards Track Y. Qu
Expires: August 19, 2017 Huawei Expires: August 20, 2017 Huawei
D. Yeung D. Yeung
Arrcus, Inc Arrcus, Inc
I. Chen I. Chen
Jabil Jabil
J. Zhang J. Zhang
Juniper Networks Juniper Networks
Y. Yang Y. Yang
SockRate SockRate
February 15, 2017 February 16, 2017
Routing Key Chain YANG Data Model Routing Key Chain YANG Data Model
draft-ietf-rtgwg-yang-key-chain-14.txt draft-ietf-rtgwg-yang-key-chain-15.txt
Abstract Abstract
This document describes the key chain YANG data model. A key chain This document describes the key chain YANG data model. A key chain
is a list of elements each containing a key, send lifetime, accept is a list of elements each containing a key string, send lifetime,
lifetime, and algorithm (authentication or encryption). By properly accept lifetime, and algorithm (authentication or encryption). By
overlapping the send and accept lifetimes of multiple key chain properly overlapping the send and accept lifetimes of multiple key
elements, keys and algorithms may be gracefully updated. By chain elements, key strings and algorithms may be gracefully updated.
representing them in a YANG data model, key distribution can be By representing them in a YANG data model, key distribution can be
automated. Key chains are commonly used for routing protocol automated. Key chains are commonly used for routing protocol
authentication and other applications. In some applications, the authentication and other applications. In some applications, the
protocols do not use the key chain element key directly, but rather a protocols do not use the key chain element key directly, but rather a
key derivation function is used to derive a short-lived key from the key derivation function is used to derive a short-lived key from the
key chain element key (e.g., the Master Keys used in the TCP key chain element key (e.g., the Master Keys used in the TCP
Authentication Option. Authentication Option.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
skipping to change at page 2, line 4 skipping to change at page 2, line 4
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on August 19, 2017. This Internet-Draft will expire on August 20, 2017.
Copyright Notice Copyright Notice
Copyright (c) 2017 IETF Trust and the persons identified as the Copyright (c) 2017 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 Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 34 skipping to change at page 2, line 34
1.1. Requirements Notation . . . . . . . . . . . . . . . . . . 3 1.1. Requirements Notation . . . . . . . . . . . . . . . . . . 3
1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3
2. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 3 2. Problem Statement . . . . . . . . . . . . . . . . . . . . . . 3
2.1. Applicability . . . . . . . . . . . . . . . . . . . . . . 4 2.1. Applicability . . . . . . . . . . . . . . . . . . . . . . 4
2.2. Graceful Key Rollover using Key Chains . . . . . . . . . 4 2.2. Graceful Key Rollover using Key Chains . . . . . . . . . 4
3. Design of the Key Chain Model . . . . . . . . . . . . . . . . 5 3. Design of the Key Chain Model . . . . . . . . . . . . . . . . 5
3.1. Key Chain Operational State . . . . . . . . . . . . . . . 5 3.1. Key Chain Operational State . . . . . . . . . . . . . . . 5
3.2. Key Chain Model Features . . . . . . . . . . . . . . . . 6 3.2. Key Chain Model Features . . . . . . . . . . . . . . . . 6
3.3. Key Chain Model Tree . . . . . . . . . . . . . . . . . . 6 3.3. Key Chain Model Tree . . . . . . . . . . . . . . . . . . 6
4. Key Chain YANG Model . . . . . . . . . . . . . . . . . . . . 9 4. Key Chain YANG Model . . . . . . . . . . . . . . . . . . . . 9
5. Security Considerations . . . . . . . . . . . . . . . . . . . 18 5. Security Considerations . . . . . . . . . . . . . . . . . . . 17
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 19 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 19
7.1. Normative References . . . . . . . . . . . . . . . . . . 19 7.1. Normative References . . . . . . . . . . . . . . . . . . 19
7.2. Informative References . . . . . . . . . . . . . . . . . 19 7.2. Informative References . . . . . . . . . . . . . . . . . 19
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 20 Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 20
A.1. Simple Key Chain with Always Valid Single Key . . . . . . 20 A.1. Simple Key Chain with Always Valid Single Key . . . . . . 20
A.2. Key Chain with Keys having Different Lifetimes . . . . . 21 A.2. Key Chain with Keys having Different Lifetimes . . . . . 21
A.3. Key Chain with Independent Send and Accept Lifetimes . . 22 A.3. Key Chain with Independent Send and Accept Lifetimes . . 22
Appendix B. Acknowledgments . . . . . . . . . . . . . . . . . . 23 Appendix B. Acknowledgments . . . . . . . . . . . . . . . . . . 23
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 23 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 23
1. Introduction 1. Introduction
This document describes the key chain YANG data model. A key chain This document describes the key chain YANG data model. A key chain
is a list of elements each containing a key, send lifetime, accept is a list of elements each containing a key string, send lifetime,
lifetime, and algorithm (authentication or encryption). By properly accept lifetime, and algorithm (authentication or encryption). By
overlapping the send and accept lifetimes of multiple key chain properly overlapping the send and accept lifetimes of multiple key
elements, keys and algorithms may be gracefully updated. By chain elements, key strings and algorithms may be gracefully updated.
representing them in a YANG data model, key distribution can be By representing them in a YANG data model, key distribution can be
automated. Key chains are commonly used for routing protocol automated. Key chains are commonly used for routing protocol
authentication and other applications. In some applications, the authentication and other applications. In some applications, the
protocols do not use the key chain element key directly, but rather a protocols do not use the key chain element key string directly, but
key derivation function is used to derive a short-lived key from the rather a key derivation function is used to derive a short-lived key
key chain element key (e.g., the Master Keys used in [TCP-AO]). from the key chain element key string (e.g., the Master Keys used in
[TCP-AO]).
1.1. Requirements Notation 1.1. Requirements Notation
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 "OPTIONAL" in this document are to be interpreted as described in
[RFC-KEYWORDS]. [RFC-KEYWORDS].
1.2. Tree Diagrams 1.2. Tree Diagrams
skipping to change at page 4, line 6 skipping to change at page 4, line 6
2. Problem Statement 2. Problem Statement
This document describes a YANG [YANG] data model for key chains. Key This document describes a YANG [YANG] data model for key chains. Key
chains have been implemented and deployed by a large percentage of chains have been implemented and deployed by a large percentage of
network equipment vendors. Providing a standard YANG model will network equipment vendors. Providing a standard YANG model will
facilitate automated key distribution and non-disruptive key facilitate automated key distribution and non-disruptive key
rollover. This will aid in tightening the security of the core rollover. This will aid in tightening the security of the core
routing infrastructure as recommended in [IAB-REPORT]. routing infrastructure as recommended in [IAB-REPORT].
A key chain is a list containing one or more elements containing a A key chain is a list containing one or more elements containing a
Key ID, key, send/accept lifetimes, and the associated authentication Key ID, key string, send/accept lifetimes, and the associated
or encryption algorithm. A key chain can be used by any service or authentication or encryption algorithm. A key chain can be used by
application requiring authentication or encryption. In essence, the any service or application requiring authentication or encryption.
key-chain is a reusable key policy that can be referenced whereever In essence, the key-chain is a reusable key policy that can be
it is required. The key-chain construct has been implemented by most referenced whereever it is required. The key-chain construct has
networking vendors and deployed in many networks. been implemented by most networking vendors and deployed in many
networks.
A conceptual representation of a crypto key table is described in A conceptual representation of a crypto key table is described in
[CRYPTO-KEYTABLE]. The crypto key table also includes keys as well [CRYPTO-KEYTABLE]. The crypto key table also includes keys as well
as their corresponding lifetimes and algorithms. Additionally, the as their corresponding lifetimes and algorithms. Additionally, the
key table includes key selection criteria and envisions a deployment key table includes key selection criteria and envisions a deployment
model where the details of the applications or services requiring model where the details of the applications or services requiring
authentication or encryption permeate into the key database. The authentication or encryption permeate into the key database. The
YANG key-chain model described herein doesn't include key selection YANG key-chain model described herein doesn't include key selection
criteria or support this deployment model. At the same time, it does criteria or support this deployment model. At the same time, it does
not preclude it. The draft [YANG-CRYPTO-KEYTABLE] describes not preclude it. The draft [YANG-CRYPTO-KEYTABLE] describes
skipping to change at page 4, line 35 skipping to change at page 4, line 36
2.1. Applicability 2.1. Applicability
Other YANG modules may reference ietf-key-chain YANG module key-chain Other YANG modules may reference ietf-key-chain YANG module key-chain
names for authentication and encryption applications. A YANG type names for authentication and encryption applications. A YANG type
has been provided to facilate reference to the key-chain name without has been provided to facilate reference to the key-chain name without
having to specify the complete YANG XML Path Language (XPath) having to specify the complete YANG XML Path Language (XPath)
selector. selector.
2.2. Graceful Key Rollover using Key Chains 2.2. Graceful Key Rollover using Key Chains
Key chains may be used to gracefully update the key and/or algorithm Key chains may be used to gracefully update the key string and/or
used by an application for authentication or encryption. This MAY be algorithm used by an application for authentication or encryption.
accomplished by accepting all the keys that have a valid accept This MAY be accomplished by accepting all the keys that have a valid
lifetime and sending the key with the most recent send lifetime. One accept lifetime and sending the key with the most recent send
scenario for facilitating key rollover is to: lifetime. One scenario for facilitating key rollover is to:
1. Distribute a key chain with a new key to all the routers or other 1. Distribute a key chain with a new key to all the routers or other
network devices in the domain of that key chain. The new key's network devices in the domain of that key chain. The new key's
accept lifetime should be such that it is accepted during the key accept lifetime should be such that it is accepted during the key
rollover period. The send lifetime should be a time in the rollover period. The send lifetime should be a time in the
future when it can be assured that all the routers in the domain future when it can be assured that all the routers in the domain
of that key are upgraded. This will have no immediate impact on of that key are upgraded. This will have no immediate impact on
the keys used for transmission. the keys used for transmission.
2. Assure that all the network devices have been updated with the 2. Assure that all the network devices have been updated with the
skipping to change at page 5, line 23 skipping to change at page 5, line 24
domain of the key chain. However, this may be deferred until the domain of the key chain. However, this may be deferred until the
next key rollover. If this is done, the key chain will always next key rollover. If this is done, the key chain will always
include two keys; either the current and future key (during key include two keys; either the current and future key (during key
rollovers) or the current and previous keys (between key rollovers) or the current and previous keys (between key
rollovers). rollovers).
3. Design of the Key Chain Model 3. Design of the Key Chain Model
The ietf-key-chain module contains a list of one or more keys indexed The ietf-key-chain module contains a list of one or more keys indexed
by a Key ID. For some applications (e.g., OSPFv3 [OSPFV3-AUTH]), the by a Key ID. For some applications (e.g., OSPFv3 [OSPFV3-AUTH]), the
Key ID is used to identify the key chain entry to be used. In Key ID is used to identify the key chain key to be used. In addition
addition to the Key ID, each key chain entry includes a key-string to the Key ID, each key chain key includes a key-string and a
and a cryptographic algorithm. Optionally, the key chain entries cryptographic algorithm. Optionally, the key chain keys include
include send/accept lifetimes. If the send/accept lifetime is send/accept lifetimes. If the send/accept lifetime is unspecified,
unspecified, the key is always considered valid. the key is always considered valid.
Note that asymmetric keys, i.e., a different key value used for Note that asymmetric keys, i.e., a different key value used for
transmission versus acceptance, may be supported with multiple key transmission versus acceptance, may be supported with multiple key
chain elements where the accept-lifetime or send-lifetime is not chain elements where the accept-lifetime or send-lifetime is not
valid (e.g., has an end-time equal to the start-time). valid (e.g., has an end-time equal to the start-time).
Due to the differences in key chain implementations across various Due to the differences in key chain implementations across various
vendors, some of the data elements are optional. Finally, the crypto vendors, some of the data elements are optional. Finally, the crypto
algorithm identities are provided for reuse when configuring legacy algorithm identities are provided for reuse when configuring legacy
authentication and encryption not using key-chains. authentication and encryption not using key-chains.
A key-chain is identified by a unique name within the scope of the A key-chain is identified by a unique name within the scope of the
network device. The "key-chain-ref" typedef SHOULD be used by other network device. The "key-chain-ref" typedef SHOULD be used by other
YANG modules when they need to reference a configured key-chain. YANG modules when they need to reference a configured key-chain. The
"key-chain-state=ref" typedef SHOULD be used by other YANG modules
when they need to reference operational state for a configured key-
chain.
3.1. Key Chain Operational State 3.1. Key Chain Operational State
The key chain operational state is maintained in a separate tree. The key chain operational state is maintained in a separate tree.
The key string itself is omitted from the operational state to The key string itself is omitted from the operational state to
minimize visibility similar to what was done with keys in SNMP MIBs. minimize visibility similar to what was done with keys in SNMP MIBs.
The timestamp of the last key-chain modification is also maintained The timestamp of the last key-chain modification is also maintained
in the operational state. Additionally, the operational state in the operational state. Additionally, the operational state
includes an indication of whether or not a key chain entry is valid includes an indication of whether or not a key chain key is valid for
for sending or acceptance. sending or acceptance.
3.2. Key Chain Model Features 3.2. Key Chain Model Features
Features are used to handle differences between vendor Features are used to handle differences between vendor
implementations. For example, not all vendors support configuration implementations. For example, not all vendors support configuration
an acceptance tolerance or configuration of key strings in an acceptance tolerance or configuration of key strings in
hexadecimal. They are also used to support of security requirements hexadecimal. They are also used to support of security requirements
(e.g., TCP-AO Algorithms [TCP-AO-ALGORITHMS]) not implemented by (e.g., TCP-AO Algorithms [TCP-AO-ALGORITHMS]) not implemented by
vendors or only a single vendor. vendors or only a single vendor.
3.3. Key Chain Model Tree 3.3. Key Chain Model Tree
+--rw key-chains +--rw key-chains
| +--rw key-chain* [name] | +--rw key-chain* [name]
| | +--rw name string | | +--rw name string
| | +--rw description? string | | +--rw description? string
| | +--rw accept-tolerance {accept-tolerance}? | | +--rw accept-tolerance {accept-tolerance}?
| | | +--rw duration? uint32 | | | +--rw duration? uint32
| | +--rw key-entry* [key-id] | | +--rw key* [key-id]
| | +--rw key-id uint64 | | +--rw key-id uint64
| | +--rw lifetime | | +--rw lifetime
| | | +--rw (lifetime)? | | | +--rw (lifetime)?
| | | +--:(send-and-accept-lifetime) | | | +--:(send-and-accept-lifetime)
| | | | +--rw send-accept-lifetime | | | | +--rw send-accept-lifetime
| | | | +--rw (lifetime)? | | | | +--rw (lifetime)?
| | | | +--:(always) | | | | +--:(always)
| | | | | +--rw always? empty | | | | | +--rw always? empty
| | | | +--:(start-end-time) | | | | +--:(start-end-time)
| | | | +--rw start-date-time? yang:date-and-time | | | | +--rw start-date-time? yang:date-and-time
| | | | +--rw (end-time)? | | | | +--rw (end-time)?
| | | | +--:(infinite) | | | | +--:(infinite)
| | | | | +--rw no-end-time? empty | | | | | +--rw no-end-time? empty
| | | | +--:(duration) | | | | +--:(duration)
| | | | | +--rw duration? uint32 | | | | | +--rw duration? uint32
| | | | +--:(end-date-time) | | | | +--:(end-date-time)
| | | | +--rw end-date-time? | | | | +--rw end-date-time?
| | | | yang:date-and-time | | | | yang:date-and-time
| | | +--:(independent-send-accept-lifetime) | | | +--:(independent-send-accept-lifetime)
| | | | {independent-send-accept-lifetime}? | | | | {independent-send-accept-lifetime}?
| | | +--rw send-lifetime | | | +--rw send-lifetime
| | | | +--rw (lifetime)? | | | | +--rw (lifetime)?
| | | | +--:(always) | | | | +--:(always)
| | | | | +--rw always? empty | | | | | +--rw always? empty
| | | | +--:(start-end-time) | | | | +--:(start-end-time)
| | | | +--rw start-date-time? yang:date-and-time | | | | +--rw start-date-time? yang:date-and-time
| | | | +--rw (end-time)? | | | | +--rw (end-time)?
| | | | +--:(infinite) | | | | +--:(infinite)
| | | | | +--rw no-end-time? empty | | | | | +--rw no-end-time? empty
| | | | +--:(duration) | | | | +--:(duration)
skipping to change at page 7, line 32 skipping to change at page 7, line 37
| | +--rw crypto-algorithm identityref | | +--rw crypto-algorithm identityref
| | +--rw key-string | | +--rw key-string
| | +--rw (key-string-style)? | | +--rw (key-string-style)?
| | +--:(keystring) | | +--:(keystring)
| | | +--rw keystring? string | | | +--rw keystring? string
| | +--:(hexadecimal) {hex-key-string}? | | +--:(hexadecimal) {hex-key-string}?
| | +--rw hexadecimal-string? yang:hex-string | | +--rw hexadecimal-string? yang:hex-string
| +--rw aes-key-wrap {aes-key-wrap}? | +--rw aes-key-wrap {aes-key-wrap}?
| +--rw enable? boolean | +--rw enable? boolean
+--ro key-chains-state +--ro key-chains-state
+--ro key-chain-state* [name] +--ro key-chain* [name]
| +--ro name string | +--ro name string
| +--ro description? string | +--ro description? string
| +--ro accept-tolerance {accept-tolerance}? | +--ro accept-tolerance {accept-tolerance}?
| | +--ro duration? uint32 | | +--ro duration? uint32
| +--ro last-modified-timestamp? yang:date-and-time | +--ro last-modified-timestamp? yang:date-and-time
| +--ro key-entry-state* [key-id] | +--ro key* [key-id]
| +--ro key-id uint64 | +--ro key-id uint64
| +--ro lifetime | +--ro lifetime
| | +--ro (lifetime)? | | +--ro (lifetime)?
| | +--:(send-and-accept-lifetime) | | +--:(send-and-accept-lifetime)
| | | +--ro send-accept-lifetime | | | +--ro send-accept-lifetime
| | | +--ro (lifetime)? | | | +--ro (lifetime)?
| | | +--:(always) | | | +--:(always)
| | | | +--ro always? empty | | | | +--ro always? empty
| | | +--:(start-end-time) | | | +--:(start-end-time)
| | | +--ro start-date-time? yang:date-and-time | | | +--ro start-date-time? yang:date-and-time
| | | +--ro (end-time)? | | | +--ro (end-time)?
| | | +--:(infinite) | | | +--:(infinite)
| | | | +--ro no-end-time? empty | | | | +--ro no-end-time? empty
| | | +--:(duration) | | | +--:(duration)
| | | | +--ro duration? uint32 | | | | +--ro duration? uint32
| | | +--:(end-date-time) | | | +--:(end-date-time)
| | | +--ro end-date-time? | | | +--ro end-date-time?
| | | yang:date-and-time | | | yang:date-and-time
| | +--:(independent-send-accept-lifetime) | | +--:(independent-send-accept-lifetime)
| | | {independent-send-accept-lifetime}? | | {independent-send-accept-lifetime}?
| | +--ro send-lifetime | | +--ro send-lifetime
| | | +--ro (lifetime)? | | | +--ro (lifetime)?
| | | +--:(always) | | | +--:(always)
| | | | +--ro always? empty | | | | +--ro always? empty
| | | +--:(start-end-time) | | | +--:(start-end-time)
| | | +--ro start-date-time? yang:date-and-time | | | +--ro start-date-time? yang:date-and-time
| | | +--ro (end-time)? | | | +--ro (end-time)?
| | | +--:(infinite) | | | +--:(infinite)
| | | | +--ro no-end-time? empty | | | | +--ro no-end-time? empty
| | | +--:(duration) | | | +--:(duration)
skipping to change at page 9, line 7 skipping to change at page 9, line 10
| | | +--ro keystring? string | | | +--ro keystring? string
| | +--:(hexadecimal) {hex-key-string}? | | +--:(hexadecimal) {hex-key-string}?
| | +--ro hexadecimal-string? yang:hex-string | | +--ro hexadecimal-string? yang:hex-string
| +--ro send-lifetime-active? boolean | +--ro send-lifetime-active? boolean
| +--ro accept-lifetime-active? boolean | +--ro accept-lifetime-active? boolean
+--ro aes-key-wrap {aes-key-wrap}? +--ro aes-key-wrap {aes-key-wrap}?
+--ro enable? boolean +--ro enable? boolean
4. Key Chain YANG Model 4. Key Chain YANG Model
<CODE BEGINS> file "ietf-key-chain@2017-02-15.yang" <CODE BEGINS> file "ietf-key-chain@2017-02-16.yang"
module ietf-key-chain { module ietf-key-chain {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-key-chain"; namespace "urn:ietf:params:xml:ns:yang:ietf-key-chain";
prefix key-chain; prefix key-chain;
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
} }
import ietf-netconf-acm { import ietf-netconf-acm {
prefix nacm; prefix nacm;
skipping to change at page 9, line 42 skipping to change at page 9, line 45
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject
to the license terms contained in, the Simplified BSD License to the license terms contained in, the Simplified BSD License
set forth in Section 4.c of the IETF Trust's Legal Provisions set forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC XXXX; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision 2017-02-15 { revision 2017-02-16 {
description description
"Replace choice statement with identity for crypto-algorithm. "Initial RFC Revision";
Removed unneeded groupings.
Fixed indenations.";
reference "RFC XXXX: A YANG Data Model for key-chain"; reference "RFC XXXX: A YANG Data Model for key-chain";
} }
feature hex-key-string { feature hex-key-string {
description description
"Support hexadecimal key string."; "Support hexadecimal key string.";
} }
feature accept-tolerance { feature accept-tolerance {
description description
"To specify the tolerance or acceptance limit."; "To specify the tolerance or acceptance limit.";
} }
feature independent-send-accept-lifetime { feature independent-send-accept-lifetime {
description description
"Support for independent send and accept key lifetimes."; "Support for independent send and accept key lifetimes.";
skipping to change at page 12, line 30 skipping to change at page 12, line 33
typedef key-chain-ref { typedef key-chain-ref {
type leafref { type leafref {
path path
"/key-chain:key-chains/key-chain:key-chain/key-chain:name"; "/key-chain:key-chains/key-chain:key-chain/key-chain:name";
} }
description description
"This type is used by data models that need to reference "This type is used by data models that need to reference
configured key-chains."; configured key-chains.";
} }
typedef key-chain-state-ref {
type leafref {
path "/key-chain:key-chains-state/key-chain:key-chain/"+
"key-chain:name";
}
description
"This type is used by data models that need to reference
operational state for a configured key-chain.";
}
grouping lifetime { grouping lifetime {
description description
"Key lifetime specification."; "Key lifetime specification.";
choice lifetime { choice lifetime {
default "always"; default "always";
description description
"Options for specifying key accept or send lifetimes"; "Options for specifying key accept or send lifetimes";
case always { case always {
leaf always { leaf always {
type empty; type empty;
skipping to change at page 13, line 35 skipping to change at page 13, line 48
type yang:date-and-time; type yang:date-and-time;
description description
"End time."; "End time.";
} }
} }
} }
} }
} }
} }
grouping key-common-entry { grouping key-common {
description description
"Key-chain entry data nodes common to "Key-chain key data nodes common to
configuration and state."; configuration and state.";
container lifetime { container lifetime {
description description
"Specify a key's lifetime."; "Specify a key's lifetime.";
choice lifetime { choice lifetime {
description description
"Options for specification of send and accept lifetimes."; "Options for specification of send and accept lifetimes.";
case send-and-accept-lifetime { case send-and-accept-lifetime {
description description
"Send and accept key have the same lifetime."; "Send and accept key have the same lifetime.";
container send-accept-lifetime { container send-accept-lifetime {
skipping to change at page 15, line 14 skipping to change at page 15, line 28
to ASCII, specification in hexadecimal affords to ASCII, specification in hexadecimal affords
greater key entropy with the same number of greater key entropy with the same number of
octets. Additionally, it discourages usage of octets. Additionally, it discourages usage of
well-known words or numbers."; well-known words or numbers.";
} }
} }
} }
} }
} }
grouping key-state-entry {
description
"Key state entry.";
uses key-common-entry;
leaf send-lifetime-active {
type boolean;
config false;
description
"Indicates if the send lifetime of the
key-chain entry is currently active.";
}
leaf accept-lifetime-active {
type boolean;
config false;
description
"Indicates if the accept lifetime of the
key-chain entry is currently active.";
}
}
grouping key-chain-common { grouping key-chain-common {
description description
"key-chain common grouping."; "key-chain common grouping.";
leaf name { leaf name {
type string; type string;
description description
"Name of the key-chain."; "Name of the key-chain.";
} }
leaf description { leaf description {
type string; type string;
skipping to change at page 16, line 11 skipping to change at page 16, line 4
description description
"Tolerance for key lifetime acceptance (seconds)."; "Tolerance for key lifetime acceptance (seconds).";
leaf duration { leaf duration {
type uint32; type uint32;
units "seconds"; units "seconds";
default "0"; default "0";
description description
"Tolerance range, in seconds."; "Tolerance range, in seconds.";
} }
} }
}
grouping key-chain-config {
description
"key-chain configuration grouping.";
uses key-chain-common;
list key-entry {
key "key-id";
description
"One key.";
leaf key-id {
type uint64;
description
"Key ID.";
}
uses key-common-entry;
}
} }
grouping key-chain-state {
description
"key-chain state grouping.";
uses key-chain-common;
leaf last-modified-timestamp {
type yang:date-and-time;
description
"Timestamp of the most recent update to the key-chain";
}
list key-entry-state {
key "key-id";
description
"One key.";
leaf key-id {
type uint64;
description
"Key ID.";
}
uses key-state-entry;
}
}
container key-chains { container key-chains {
description description
"All configured key-chains on the device."; "All configured key-chains on the device.";
list key-chain { list key-chain {
key "name"; key "name";
description description
"List of key-chains."; "List of key-chains.";
uses key-chain-config; uses key-chain-common;
list key {
key "key-id";
description
"Single key in key chain.";
leaf key-id {
type uint64;
description
"Numeric value uniquely identifying the key";
}
uses key-common;
}
} }
container aes-key-wrap { container aes-key-wrap {
if-feature "aes-key-wrap"; if-feature "aes-key-wrap";
description description
"AES Key Wrap password encryption."; "AES Key Wrap password encryption.";
leaf enable { leaf enable {
type boolean; type boolean;
default "false"; default "false";
description description
"Enable AES Key Wrap encryption."; "Enable AES Key Wrap encryption.";
skipping to change at page 17, line 25 skipping to change at page 16, line 39
description description
"AES Key Wrap password encryption."; "AES Key Wrap password encryption.";
leaf enable { leaf enable {
type boolean; type boolean;
default "false"; default "false";
description description
"Enable AES Key Wrap encryption."; "Enable AES Key Wrap encryption.";
} }
} }
} }
container key-chains-state { container key-chains-state {
config false; config false;
description description
"State for all configured key-chains on the device."; "State for all configured key-chains on the device.";
list key-chain-state { list key-chain {
key "name"; key "name";
description description
"List of key-chains and operational state."; "List of key-chains and operational state.";
uses key-chain-state; uses key-chain-common;
leaf last-modified-timestamp {
type yang:date-and-time;
description
"Timestamp of the most recent update to the key-chain";
}
list key {
key "key-id";
description
"Single key in key chain.";
leaf key-id {
type uint64;
description
"Numeric value uniquely identifying the key";
}
uses key-common;
leaf send-lifetime-active {
type boolean;
config false;
description
"Indicates if the send lifetime of the
key-chain key is currently active.";
}
leaf accept-lifetime-active {
type boolean;
config false;
description
"Indicates if the accept lifetime of the
key-chain key is currently active.";
}
}
} }
container aes-key-wrap { container aes-key-wrap {
if-feature "aes-key-wrap"; if-feature "aes-key-wrap";
description description
"AES Key Wrap password encryption."; "AES Key Wrap password encryption.";
leaf enable { leaf enable {
type boolean; type boolean;
description description
"Indicates whether AES Key Wrap encryption is enabled."; "Indicates whether AES Key Wrap encryption is enabled.";
} }
skipping to change at page 20, line 38 skipping to change at page 20, line 38
A.1. Simple Key Chain with Always Valid Single Key A.1. Simple Key Chain with Always Valid Single Key
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<key-chains xmlns="urn:ietf:params:xml:ns:yang:ietf-key-chain"> <key-chains xmlns="urn:ietf:params:xml:ns:yang:ietf-key-chain">
<key-chain> <key-chain>
<name>keychain-no-end-time</name> <name>keychain-no-end-time</name>
<description> <description>
A key chain with a single key that is always valid for tx/rx A key chain with a single key that is always valid for tx/rx
</description> </description>
<key-entry> <key>
<key-id>100</key-id> <key-id>100</key-id>
<lifetime> <lifetime>
<send-accept-lifetime> <send-accept-lifetime>
<always/> <always/>
</send-accept-lifetime> </send-accept-lifetime>
</lifetime> </lifetime>
<crypto-algorithm>md5</crypto-algorithm> <crypto-algorithm>md5</crypto-algorithm>
<key-string> <key-string>
<keystring>keystring_in_ascii_100</keystring> <keystring>keystring_in_ascii_100</keystring>
</key-string> </key-string>
</key-entry> </key>
</key-chain> </key-chain>
</key-chains> </key-chains>
</data> </data>
A.2. Key Chain with Keys having Different Lifetimes A.2. Key Chain with Keys having Different Lifetimes
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<key-chains xmlns="urn:ietf:params:xml:ns:yang:ietf-key-chain"> <key-chains xmlns="urn:ietf:params:xml:ns:yang:ietf-key-chain">
<key-chain> <key-chain>
<name>keychain2</name> <name>keychain2</name>
<description> <description>
A key chain where each key contains different send time A key chain where each key contains different send time
and accept time and accept time
</description> </description>
<key-entry> <key>
<key-id>35</key-id> <key-id>35</key-id>
<lifetime> <lifetime>
<send-lifetime> <send-lifetime>
<start-date-time>2017-01-01T00:00:00Z</start-date-time> <start-date-time>2017-01-01T00:00:00Z</start-date-time>
<end-date-time>2017-02-01T00:00:00Z</end-date-time> <end-date-time>2017-02-01T00:00:00Z</end-date-time>
</send-lifetime> </send-lifetime>
<accept-lifetime> <accept-lifetime>
<start-date-time>2016-12-31T23:59:55Z</start-date-time> <start-date-time>2016-12-31T23:59:55Z</start-date-time>
<end-date-time>2017-02-01T00:00:05Z</end-date-time> <end-date-time>2017-02-01T00:00:05Z</end-date-time>
</accept-lifetime> </accept-lifetime>
</lifetime> </lifetime>
<crypto-algorithm>hmac-sha-1</crypto-algorithm> <crypto-algorithm>hmac-sha-1</crypto-algorithm>
<key-string> <key-string>
<keystring>keystring_in_ascii_35</keystring> <keystring>keystring_in_ascii_35</keystring>
</key-string> </key-string>
</key-entry> </key>
<key-entry> <key>
<key-id>36</key-id> <key-id>36</key-id>
<lifetime> <lifetime>
<send-lifetime> <send-lifetime>
<start-date-time>2017-02-01T00:00:00Z</start-date-time> <start-date-time>2017-02-01T00:00:00Z</start-date-time>
<end-date-time>2017-03-01T00:00:00Z</end-date-time> <end-date-time>2017-03-01T00:00:00Z</end-date-time>
</send-lifetime> </send-lifetime>
<accept-lifetime> <accept-lifetime>
<start-date-time>2017-01-31T23:59:55Z</start-date-time> <start-date-time>2017-01-31T23:59:55Z</start-date-time>
<end-date-time>2017-03-01T00:00:05Z</end-date-time> <end-date-time>2017-03-01T00:00:05Z</end-date-time>
</accept-lifetime> </accept-lifetime>
</lifetime> </lifetime>
<crypto-algorithm>hmac-sha-1</crypto-algorithm> <crypto-algorithm>hmac-sha-1</crypto-algorithm>
<key-string> <key-string>
<hexadecimal-string>fe:ed:be:af:36</hexadecimal-string> <hexadecimal-string>fe:ed:be:af:36</hexadecimal-string>
</key-string> </key-string>
</key-entry> </key>
</key-chain> </key-chain>
</key-chains> </key-chains>
</data> </data>
A.3. Key Chain with Independent Send and Accept Lifetimes A.3. Key Chain with Independent Send and Accept Lifetimes
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<key-chains xmlns="urn:ietf:params:xml:ns:yang:ietf-key-chain"> <key-chains xmlns="urn:ietf:params:xml:ns:yang:ietf-key-chain">
<key-chain> <key-chain>
<name>keychain2</name> <name>keychain2</name>
<description> <description>
A key chain where each key contains different send time A key chain where each key contains different send time
and accept time and accept time
</description> </description>
<key-entry> <key>
<key-id>35</key-id> <key-id>35</key-id>
<lifetime> <lifetime>
<send-lifetime> <send-lifetime>
<start-date-time>2017-01-01T00:00:00Z</start-date-time> <start-date-time>2017-01-01T00:00:00Z</start-date-time>
<end-date-time>2017-02-01T00:00:00Z</end-date-time> <end-date-time>2017-02-01T00:00:00Z</end-date-time>
</send-lifetime> </send-lifetime>
<accept-lifetime> <accept-lifetime>
<start-date-time>2016-12-31T23:59:55Z</start-date-time> <start-date-time>2016-12-31T23:59:55Z</start-date-time>
<end-date-time>2017-02-01T00:00:05Z</end-date-time> <end-date-time>2017-02-01T00:00:05Z</end-date-time>
</accept-lifetime> </accept-lifetime>
</lifetime> </lifetime>
<crypto-algorithm>hmac-sha-1</crypto-algorithm> <crypto-algorithm>hmac-sha-1</crypto-algorithm>
<key-string> <key-string>
<keystring>keystring_in_ascii_35</keystring> <keystring>keystring_in_ascii_35</keystring>
</key-string> </key-string>
</key-entry> </key>
<key-entry> <key>
<key-id>36</key-id> <key-id>36</key-id>
<lifetime> <lifetime>
<send-lifetime> <send-lifetime>
<start-date-time>2017-02-01T00:00:00Z</start-date-time> <start-date-time>2017-02-01T00:00:00Z</start-date-time>
<end-date-time>2017-03-01T00:00:00Z</end-date-time> <end-date-time>2017-03-01T00:00:00Z</end-date-time>
</send-lifetime> </send-lifetime>
<accept-lifetime> <accept-lifetime>
<start-date-time>2017-01-31T23:59:55Z</start-date-time> <start-date-time>2017-01-31T23:59:55Z</start-date-time>
<end-date-time>2017-03-01T00:00:05Z</end-date-time> <end-date-time>2017-03-01T00:00:05Z</end-date-time>
</accept-lifetime> </accept-lifetime>
</lifetime> </lifetime>
<crypto-algorithm>hmac-sha-1</crypto-algorithm> <crypto-algorithm>hmac-sha-1</crypto-algorithm>
<key-string> <key-string>
<hexadecimal-string>fe:ed:be:af:36</hexadecimal-string> <hexadecimal-string>fe:ed:be:af:36</hexadecimal-string>
</key-string> </key-string>
</key-entry> </key>
</key-chain> </key-chain>
</key-chains> </key-chains>
</data> </data>
Appendix B. Acknowledgments Appendix B. Acknowledgments
The RFC text was produced using Marshall Rose's xml2rfc tool. The RFC text was produced using Marshall Rose's xml2rfc tool.
Thanks to Brian Weis for fruitful discussions on security Thanks to Brian Weis for fruitful discussions on security
requirements. requirements.
 End of changes. 43 change blocks. 
120 lines changed or deleted 120 lines changed or added

This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/