rfc9145xml2.original.xml | rfc9145.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!-- This template is for creating an Internet Draft using xml2rfc, | <!DOCTYPE rfc [ | |||
which is available here: http://xml.resource.org. --> | <!ENTITY nbsp " "> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <!ENTITY zwsp "​"> | |||
<!-- One method to get references from the online citation libraries. | <!ENTITY nbhy "‑"> | |||
There has to be one entity for each item to be referenced. | <!ENTITY wj "⁠"> | |||
An alternate method (rfc include) is described in the references. --> | ||||
]> | ]> | |||
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
<!-- used by XSLT processors --> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ie | |||
<!-- For a complete list and description of processing instructions (PIs), | tf-sfc-nsh-integrity-09" number="9145" ipr="trust200902" obsoletes="" updates=" | |||
please see http://xml.resource.org/authoring/README.html. --> | " submissionType="IETF" xml:lang="en" consensus="true" tocInclude="true" tocDept | |||
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds | h="4" symRefs="true" sortRefs="true" version="3"> | |||
might want to use. | ||||
(Here they are set differently than their defaults in xml2rfc v1.32) --> | ||||
<?rfc strict="yes" ?> | ||||
<!-- give errors regarding ID-nits and DTD validation --> | ||||
<!-- control the table of contents (ToC) --> | ||||
<?rfc toc="yes"?> | ||||
<!-- generate a ToC --> | ||||
<?rfc tocdepth="4"?> | ||||
<!-- the number of levels of subsections in ToC. default: 3 --> | ||||
<!-- control references --> | ||||
<?rfc symrefs="yes"?> | ||||
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] --> | ||||
<?rfc sortrefs="yes" ?> | ||||
<!-- sort the reference entries alphabetically --> | ||||
<!-- control vertical white space | ||||
(using these PIs as follows is recommended by the RFC Editor) --> | ||||
<?rfc compact="yes" ?> | ||||
<!-- do not start each main section on a new page --> | ||||
<?rfc subcompact="no" ?> | ||||
<!-- keep one blank line between list items --> | ||||
<!-- end of list of popular I-D processing instructions --> | ||||
<rfc category="std" docName="draft-ietf-sfc-nsh-integrity-09" | ||||
ipr="trust200902"> | ||||
<front> | <front> | |||
<title abbrev="Integrity Protection for the NSH">Integrity Protection for | <title abbrev="Integrity Protection for the NSH">Integrity Protection for | |||
the Network Service Header (NSH) and Encryption of Sensitive Context | the Network Service Header (NSH) and Encryption of Sensitive Context | |||
Headers</title> | Headers</title> | |||
<seriesInfo name="RFC" value="9145"/> | ||||
<author fullname="Mohamed Boucadair" initials="M." surname="Boucadair"> | <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair"> | |||
<organization>Orange</organization> | <organization>Orange</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street></street> | <street/> | |||
<city>Rennes</city> | <city>Rennes</city> | |||
<code>35000</code> | <code>35000</code> | |||
<country>France</country> | <country>France</country> | |||
</postal> | </postal> | |||
<email>mohamed.boucadair@orange.com</email> | <email>mohamed.boucadair@orange.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K"> | ||||
<author fullname="Tirumaleswar Reddy" initials="T." surname="Reddy"> | ||||
<organization>Akamai</organization> | <organization>Akamai</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Embassy Golf Link Business Park</street> | <street>Embassy Golf Link Business Park</street> | |||
<city>Bangalore</city> | <city>Bangalore</city> | |||
<region>Karnataka</region> | <region>Karnataka</region> | |||
<code>560071</code> | <code>560071</code> | |||
<country>India</country> | <country>India</country> | |||
</postal> | </postal> | |||
<email>kondtir@gmail.com</email> | <email>kondtir@gmail.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Dan Wing" initials="D." surname="Wing"> | <author fullname="Dan Wing" initials="D." surname="Wing"> | |||
<organization abbrev="Citrix">Citrix Systems, Inc.</organization> | <organization abbrev="Citrix">Citrix Systems, Inc.</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street></street> | <street/> | |||
<country>USA</country> | <country>USA</country> | |||
</postal> | </postal> | |||
<email>dwing-ietf@fuggles.com</email> | <email>dwing-ietf@fuggles.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date month="December" year="2021"/> | ||||
<date /> | ||||
<workgroup>SFC</workgroup> | <workgroup>SFC</workgroup> | |||
<keyword>Security</keyword> | <keyword>Security</keyword> | |||
<keyword>Resilience</keyword> | <keyword>Resilience</keyword> | |||
<keyword>Automation</keyword> | <keyword>Automation</keyword> | |||
<keyword>Service delivery</keyword> | <keyword>Service delivery</keyword> | |||
<keyword>Providers</keyword> | <keyword>Providers</keyword> | |||
<keyword>Differentiated services</keyword> | <keyword>Differentiated services</keyword> | |||
<keyword>Traffic Engineering</keyword> | <keyword>Traffic Engineering</keyword> | |||
<keyword>Attack mitigation</keyword> | <keyword>Attack mitigation</keyword> | |||
<abstract> | <abstract> | |||
<t>This specification presents an optional method to add integrity | <t>This specification presents an optional method to add integrity | |||
protection directly to the Network Service Header (NSH) used for Service | protection directly to the Network Service Header (NSH) used for Service | |||
Function Chaining (SFC). Also, this specification allows for the | Function Chaining (SFC). Also, this specification allows for the | |||
encryption of sensitive metadata that is carried in the NSH.</t> | encryption of sensitive metadata (MD) that is carried in the NSH.</t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section title="Introduction"> | <section numbered="true" toc="default"> | |||
<name>Introduction</name> | ||||
<t>Many advanced Service Functions (SFs) are enabled for the delivery of | <t>Many advanced Service Functions (SFs) are enabled for the delivery of | |||
value-added services. Typically, SFs are used to meet various service | value-added services. Typically, SFs are used to meet various service | |||
objectives such as IP address sharing, avoiding covert channels, | objectives such as IP address sharing, avoiding covert channels, | |||
detecting Denial-of-Service (DoS) attacks and protecting network | detecting Denial-of-Service (DoS) attacks and protecting network | |||
infrastructures against them, network slicing, etc. Because of the | infrastructures against them, network slicing, etc. Because of the | |||
proliferation of such advanced SFs together with complex service | proliferation of such advanced SFs together with complex service | |||
deployment constraints that demand more agile service delivery | deployment constraints that demand more agile service delivery | |||
procedures, operators need to rationalize their service delivery logic | procedures, operators need to rationalize their service delivery logic | |||
and control its complexity while optimising service activation time | and control its complexity while optimizing service activation time | |||
cycles. The overall problem space is described in <xref | cycles. The overall problem space is described in <xref target="RFC7498" f | |||
target="RFC7498"></xref>.</t> | ormat="default"/>.</t> | |||
<t><xref target="RFC7665" format="default"/> presents a data plane | ||||
<t><xref target="RFC7665"></xref> presents a data plane architecture | architecture addressing the problematic aspects of existing service | |||
addressing the problematic aspects of existing service deployments, | deployments, including topological dependence and configuration | |||
including topological dependence and configuration complexity. It also | complexity. It also describes an architecture for the specification, | |||
describes an architecture for the specification, creation, and | creation, and maintenance of Service Function Chains (SFCs) within a | |||
maintenance of Service Function Chains (SFCs) within a network. That is, | network, that is, how to define an ordered set of SFs and ordering | |||
how to define an ordered set of SFs and ordering constraints that must | constraints that must be applied to packets/flows selected as a result | |||
be applied to packets/flows selected as a result of traffic | of traffic classification. <xref target="RFC8300" format="default"/> | |||
classification. <xref target="RFC8300"></xref> specifies the SFC | specifies the SFC encapsulation: Network Service Header (NSH).</t> | |||
encapsulation: Network Service Header (NSH).</t> | ||||
<t>The NSH data is unauthenticated and unencrypted, forcing a service | <t>The NSH data is unauthenticated and unencrypted, forcing a service | |||
topology that requires security and privacy to use a transport | topology that requires security and privacy to use a transport | |||
encapsulation that supports such features (Section 8.2 of <xref | encapsulation that supports such features (<xref target="RFC8300" section= | |||
target="RFC8300"></xref>).</t> | "8.2" sectionFormat="of"/>).</t> | |||
<t>Note that some transport encapsulations (e.g., IPsec) only provide | <t>Note that some transport encapsulations (e.g., IPsec) only provide | |||
hop-by-hop security between two SFC data plane elements (e.g., two | hop-by-hop security between two SFC data plane elements (e.g., two | |||
Service Function Forwarders (SFFs), SFF to SF) and do not provide | Service Function Forwarders (SFFs), SFF to SF) and do not provide | |||
SF-to-SF security of NSH metadata. For example, if IPsec is used, SFFs | SF-to-SF security of NSH metadata. For example, if IPsec is used, SFFs | |||
or SFs within a Service Function Path (SFP) that are not authorized to | or SFs within a Service Function Path (SFP) that are not authorized to | |||
access the sensitive metadata (e.g., privacy-sensitive information) will | access the sensitive metadata (e.g., privacy-sensitive information) will | |||
have access to the metadata. As a reminder, the metadata referred to is | have access to the metadata. As a reminder, the metadata referred to is | |||
information that is inserted by Classifiers or intermediate SFs and | information that is inserted by Classifiers or intermediate SFs and | |||
shared with downstream SFs; such information is not visible to the | shared with downstream SFs; such information is not visible to the | |||
communication endpoints (Section 4.9 of <xref | communication endpoints (<xref target="RFC7665" section="4.9" | |||
target="RFC7665"></xref>).</t> | sectionFormat="of"/>).</t> | |||
<t>The lack of such capability was reported during the development of | <t>The lack of such capability was reported during the development of | |||
<xref target="RFC8300"></xref> and <xref target="RFC8459"></xref>. The | <xref target="RFC8300" format="default"/> and <xref target="RFC8459" | |||
reader may refer to Section 3.2.1 of <xref | format="default"/>. The reader may refer to <xref | |||
target="I-D.arkko-farrell-arch-model-t"></xref> for a discussion on the | target="I-D.arkko-farrell-arch-model-t" section="3.2.1" | |||
need for more awareness about attacks from within closed domains.</t> | sectionFormat="of"/> for a discussion on the need for more awareness | |||
about attacks from within closed domains.</t> | ||||
<t>This specification fills that gap for SFC (that is, it defines the | <t>This specification fills that gap for SFC (that is, it defines the | |||
"NSH Variable Header-Based Integrity" option mentioned in Section 8.2.1 | "NSH Variable Header-Based Integrity" option mentioned in <xref | |||
of <xref target="RFC8300"></xref>). Concretely, this document adds | target="RFC8300" section="8.2.1" sectionFormat="of"/>). Concretely, this | |||
integrity protection and optional encryption of sensitive metadata | document adds integrity protection and optional encryption of sensitive | |||
directly to the NSH (<xref target="overview"></xref>). The integrity | metadata directly to the NSH (<xref target="overview" | |||
protection covers the packet payload and provides replay protection | format="default"/>). The integrity protection covers the packet payload | |||
(<xref target="time"></xref>). Thus, the NSH does not have to rely upon | and provides replay protection (<xref target="time" | |||
an underlying transport encapsulation for security.</t> | format="default"/>). Thus, the NSH does not have to rely upon an | |||
underlying transport encapsulation for security.</t> | ||||
<t>This specification introduces new Variable-Length Context Headers to | <t>This specification introduces new Variable-Length Context Headers to | |||
carry fields necessary for integrity-protected NSH headers and encrypted | carry fields necessary for integrity-protected NSH headers and encrypted | |||
Context Headers (<xref target="new"></xref>). This specification is only | Context Headers (<xref target="new" format="default"/>). This | |||
applicable to NSH MD Type 0x02 (Section 2.5 of <xref | specification is only applicable to NSH MD Type 0x02 (<xref | |||
target="RFC8300"></xref>). MTU considerations are discussed in <xref | target="RFC8300" section="2.5" sectionFormat="of"/>). MTU considerations | |||
target="MTU"></xref>. This specification is not applicable to NSH MD | are discussed in <xref target="MTU" format="default"/>. This | |||
Type 0x01 (Section 2.4 of <xref target="RFC8300"></xref>) because that | specification is not applicable to NSH MD Type 0x01 (<xref | |||
MD Type only allows a Fixed-Length Context Header whose size is | target="RFC8300" section="2.4" sectionFormat="of"/>) because that MD | |||
16-bytes; that is not sufficient to accommodate both the metadata and | Type only allows a Fixed-Length Context Header whose size is 16 bytes; | |||
message integrity of the NSH data.</t> | that is not sufficient to accommodate both the metadata and message | |||
integrity of the NSH data.</t> | ||||
<t>This specification limits access to NSH-supplied information along an | <t>This specification limits access to NSH-supplied information along an | |||
SFP to entities that have a need to interpret it.</t> | SFP to entities that have a need to interpret it.</t> | |||
<t>The mechanism specified in this document does not preclude the use of | <t>The mechanism specified in this document does not preclude the use of | |||
transport security. Such considerations are deployment-specific.</t> | transport security. Such considerations are deployment specific.</t> | |||
<t>It is out of the scope of this document to specify an NSH-aware | <t>It is out of the scope of this document to specify an NSH-aware | |||
control plane solution.</t> | control plane solution.</t> | |||
</section> | </section> | |||
<section anchor="notation" numbered="true" toc="default"> | ||||
<name>Terminology</name> | ||||
<section anchor="notation" title="Terminology"> | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
"OPTIONAL" in this document are to be interpreted as described in BCP 14 | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
<xref target="RFC2119"></xref> <xref target="RFC8174"></xref> when, and | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | |||
to be interpreted as described in BCP 14 <xref target="RFC2119" | ||||
format="default"/> <xref target="RFC8174" format="default"/> when, and | ||||
only when, they appear in all capitals, as shown here.</t> | only when, they appear in all capitals, as shown here.</t> | |||
<t>This document makes use of the terms defined in <xref | <t>This document makes use of the terms defined in <xref | |||
target="RFC7665"></xref> and <xref target="RFC8300"></xref>. The term | target="RFC7665" format="default"/> and <xref target="RFC8300" | |||
"transport encapsulation" used in this document refers to the outer | format="default"/>. The term "transport encapsulation" used in this | |||
encapsulation (e.g., Generic Routing Encapsulation (GRE), IPsec, Generic | document refers to the outer encapsulation (e.g., Generic Routing | |||
Protocol Extension for VXLAN (VXLAN-GPE)) that is used to carry | Encapsulation (GRE), IPsec, and Generic Protocol Extension for Virtual | |||
NSH-encapsulated packets as per Section 4 of <xref | eXtensible Local Area Network (VXLAN-GPE)) that is used to carry | |||
target="RFC8300"></xref>.</t> | NSH-encapsulated packets as per <xref target="RFC8300" section="4" | |||
sectionFormat="of"/>.</t> | ||||
<t>The document defines the following terms:<list style="hanging"> | ||||
<t hangText="SFC data plane element:">Refers to NSH-aware SF, SFF, | ||||
SFC Proxy, or Classifier as defined in the SFC data plane | ||||
architecture <xref target="RFC7665"></xref> and further refined in | ||||
<xref target="RFC8300"></xref>.</t> | ||||
<t hangText="SFC control element:">Is a logical entity that | <t>The document defines the following terms:</t> | |||
<dl newline="false" spacing="normal"> | ||||
<dt>SFC data plane element:</dt> | ||||
<dd>Refers to NSH-aware SF, SFF, | ||||
the SFC Proxy, or the Classifier as defined in the SFC data plane | ||||
architecture <xref target="RFC7665" format="default"/> and further ref | ||||
ined in | ||||
<xref target="RFC8300" format="default"/>.</dd> | ||||
<dt>SFC control element:</dt> | ||||
<dd>Is a logical entity that | ||||
instructs one or more SFC data plane elements on how to process NSH | instructs one or more SFC data plane elements on how to process NSH | |||
packets within an SFC-enabled domain.</t> | packets within an SFC-enabled domain.</dd> | |||
<dt>Key Identifier:</dt> | ||||
<t hangText="Key Identifier:">Is used to identify keys to authorized | <dd>Is used to identify keys to authorized entities. See, for example, | |||
entities. See, for example, 'kid' usage in <xref | "kid" usage in <xref target="RFC7635" format="default"/>.</dd> | |||
target="RFC7635"></xref>.</t> | <dt>NSH data:</dt> | |||
<dd>The NSH is composed of a Base Header, a | ||||
<t hangText="NSH data:">The NSH is composed of a Base Header, a | ||||
Service Path Header, and optional Context Headers. NSH data refers | Service Path Header, and optional Context Headers. NSH data refers | |||
to all the above headers and the packet or frame on which the NSH is | to all the above headers and the packet or frame on which the NSH is | |||
imposed to realize an SFP.</t> | imposed to realize an SFP.</dd> | |||
<dt>NSH imposer:</dt> | ||||
<t hangText="NSH imposer:">Refers to an SFC data plane element that | <dd>Refers to an SFC data plane element that | |||
is entitled to impose the NSH with the Context Headers defined in | is entitled to impose the NSH with the Context Headers defined in | |||
this document.</t> | this document.</dd> | |||
</list></t> | </dl> | |||
</section> | </section> | |||
<section anchor="req" numbered="true" toc="default"> | ||||
<name>Assumptions and Basic Requirements</name> | ||||
<t><xref target="RFC8300" section="2" sectionFormat="of"/> specifies that | ||||
the NSH | ||||
data can be spread over three headers:</t> | ||||
<section anchor="req" title="Assumptions and Basic Requirements"> | <dl> | |||
<t>Section 2 of <xref target="RFC8300"></xref> specifies that the NSH | ||||
data can be spread over three headers:<list style="symbols"> | ||||
<t>Base Header: Provides information about the service header and | ||||
the payload protocol.</t> | ||||
<t>Service Path Header: Provides path identification and location | <dt>Base Header: | |||
within an SFP.</t> | </dt> | |||
<dd>Provides information about the service header and the payload protoco | ||||
l. | ||||
</dd> | ||||
<t>Context Header(s): Carries metadata (i.e., context data) along a | <dt>Service Path Header: | |||
service path.</t> | </dt> | |||
</list></t> | <dd>Provides path identification and location within an SFP. | |||
</dd> | ||||
<t>The NSH allows sharing context information (a.k.a., metadata) with | <dt>Context Header(s): | |||
downstream NSH-aware data plane elements on a per SFC/SFP basis. To that | </dt> | |||
aim:<list style="empty"> | <dd>Carries metadata (i.e., context data) along a service path. | |||
<t>The Classifier is instructed by an SFC control element about the | </dd> | |||
set of context information to be supplied for a given service | ||||
function chain.</t> | ||||
<t>An NSH-aware SF is instructed by an SFC control element about any | </dl> | |||
<t>The NSH allows sharing context information (a.k.a. metadata) with | ||||
downstream NSH-aware data plane elements on a per-SFC/SFP basis. To that | ||||
aim:</t> | ||||
<ul spacing="normal"> | ||||
<li>The Classifier is instructed by an SFC control element about the | ||||
set of context information to be supplied for a given service | ||||
function chain.</li> | ||||
<li>An NSH-aware SF is instructed by an SFC control element about any | ||||
metadata it needs to attach to packets for a given service function | metadata it needs to attach to packets for a given service function | |||
chain. This instruction may occur any time during the validity | chain. This instruction may occur any time during the validity | |||
lifetime of an SFC/SFP. For a given service function chain, the | lifetime of an SFC/SFP. For a given service function chain, the | |||
NSH-aware SF is also provided with an order for consuming a set of | NSH-aware SF is also provided with an order for consuming a set of | |||
contexts supplied in a packet.</t> | contexts supplied in a packet.</li> | |||
<li>An NSH-aware SF can also be instructed by an SFC control element | ||||
<t>An NSH-aware SF can also be instructed by an SFC control element | ||||
about the behavior it should adopt after consuming context | about the behavior it should adopt after consuming context | |||
information that was supplied in the NSH. For example, the context | information that was supplied in the NSH. For example, the context | |||
information can be maintained, updated, or stripped.</t> | information can be maintained, updated, or stripped.</li> | |||
<li>An SFC Proxy may be instructed by an SFC control element about | ||||
<t>An SFC Proxy may be instructed by an SFC control element about | ||||
the behavior it should adopt to process the context information that | the behavior it should adopt to process the context information that | |||
was supplied in the NSH on behalf of an NSH-unaware SF (e.g., the | was supplied in the NSH on behalf of an NSH-unaware SF (e.g., the | |||
context information can be maintained or stripped). The SFC Proxy | context information can be maintained or stripped). The SFC Proxy | |||
may also be instructed to add some new context information into the | may also be instructed to add some new context information into the | |||
NSH on behalf of an NSH-unaware SF.</t> | NSH on behalf of an NSH-unaware SF.</li> | |||
</list></t> | </ul> | |||
<t>In reference to <xref target="NSH"/>:</t> | ||||
<t>In reference to Table 1, <list style="symbols"> | <ul spacing="normal"> | |||
<t>Classifiers, NSH-aware SFs, and SFC proxies are entitled to | <li>Classifiers, NSH-aware SFs, and SFC proxies are entitled to | |||
update the Context Header(s).</t> | update the Context Header(s).</li> | |||
<li>Only NSH-aware SFs and SFC proxies are entitled to update the | ||||
<t>Only NSH-aware SFs and SFC proxies are entitled to update the | Service Path Header.</li> | |||
Service Path Header.</t> | <li>SFFs are entitled to modify the Base Header (TTL value, for | |||
<t>SFFs are entitled to modify the Base Header (TTL value, for | ||||
example). Nevertheless, SFFs are not supposed to act on the Context | example). Nevertheless, SFFs are not supposed to act on the Context | |||
Headers or look into the content of the Context Headers (Section 4.3 | Headers or look into the content of the Context Headers (<xref target= | |||
of <xref target="RFC7665"></xref>).</t> | "RFC7665" section="4.3" sectionFormat="of"/>).</li> | |||
</list></t> | </ul> | |||
<t>Thus, the following requirements:</t> | ||||
<ul spacing="normal"> | ||||
<li>Only Classifiers, NSH-aware SFs, and SFC proxies must be able to | ||||
encrypt and decrypt a given Context Header.</li> | ||||
<li>Both encrypted and unencrypted Context Headers may be included in | ||||
the same NSH.</li> | ||||
<li>The solution must provide integrity protection for the Service | ||||
Path Header.</li> | ||||
<li>The solution must provide optional integrity protection for the | ||||
Base Header. The implications of disabling such checks are discussed | ||||
in <xref target="mac1" format="default"/>.</li> | ||||
</ul> | ||||
<t>Thus, the following requirements:<list style="symbols"> | <table anchor="NSH"> | |||
<t>Only Classifiers, NSH-aware SFs, and SFC proxies must be able to | <name>Summary of NSH Actions</name> | |||
encrypt and decrypt a given Context Header.</t> | <thead> | |||
<tr> | ||||
<th rowspan="2" colspan="1" align="center">SFC Data Plane Element</th | ||||
> | ||||
<th colspan="3" align="center">Insert, remove, or replace the NSH</th | ||||
> | ||||
<th colspan="2" align="center">Update the NSH</th> | ||||
</tr> | ||||
<tr > | ||||
<th align="center">Insert</th> | ||||
<th align="center">Remove</th> | ||||
<th align="center">Replace</th> | ||||
<th align="center">Decrement Service Index</th> | ||||
<th align="center">Update Context Header(s)</th> | ||||
<t>Both encrypted and unencrypted Context Headers may be included in | </tr> | |||
the same NSH.</t> | ||||
<t>The solution must provide integrity protection for the Service | </thead> | |||
Path Header.</t> | <tbody> | |||
<tr> | ||||
<td>Classifier</td> | ||||
<td align="center">+</td> | ||||
<td></td> | ||||
<td align="center">+</td> | ||||
<td></td> | ||||
<td align="center">+</td> | ||||
</tr> | ||||
<t>The solution must provide optional integrity protection for the | <tr> | |||
Base Header. The implications of disabling such checks are discussed | <td>Service Function Forwarder (SFF)</td> | |||
in <xref target="mac1"></xref>.</t> | <td></td> | |||
</list></t> | <td align="center">+</td> | |||
<td></td> | ||||
<td></td> | ||||
<td></td> | ||||
</tr> | ||||
<t><figure align="center"> | <tr> | |||
<artwork align="center"><![CDATA[+----------------+------------------- | <td>Service Function (SF)</td> | |||
----------+-------------------+ | <td></td> | |||
| | Insert, remove, or replace | Update the NSH | | <td></td> | |||
| | the NSH | | | <td></td> | |||
| | | | | <td align="center">+</td> | |||
| SFC Data Plane +---------+---------+---------+---------+---------+ | <td align="center">+</td> | |||
| Element | | | |Decrement| Update | | </tr> | |||
| | Insert | Remove | Replace | Service | Context | | ||||
| | | | | Index |Header(s)| | ||||
+================+=========+=========+=========+=========+=========+ | ||||
| | + | | + | | + | | ||||
| Classifier | | | | | | | ||||
+----------------+---------+---------+---------+---------+---------+ | ||||
|Service Function| | + | | | | | ||||
|Forwarder (SFF) | | | | | | | ||||
+----------------+---------+---------+---------+---------+---------+ | ||||
|Service Function| | | | + | + | | ||||
| (SF) | | | | | | | ||||
+----------------+---------+---------+---------+---------+---------+ | ||||
| | + | + | | + | + | | ||||
| SFC Proxy | | | | | | | ||||
+----------------+---------+---------+---------+---------+---------+ | ||||
Table 1: Summary of NSH Actions]]></artwork> | <tr> | |||
</figure></t> | <td>Service Function Chaining (SFC) Proxy</td> | |||
<td align="center">+</td> | ||||
<td align="center">+</td> | ||||
<td></td> | ||||
<td align="center">+</td> | ||||
<td align="center">+</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t></t> | ||||
</section> | </section> | |||
<section anchor="overview" numbered="true" toc="default"> | ||||
<name>Design Overview</name> | ||||
<section anchor="overview" title="Design Overview"> | <section numbered="true" toc="default"> | |||
<t></t> | <name>Supported Security Services</name> | |||
<section title="Supported Security Services"> | ||||
<t>This specification provides the functions described in the | <t>This specification provides the functions described in the | |||
following subsections.</t> | following subsections.</t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Encrypt All or a Subset of Context Headers"> | <name>Encrypt All or a Subset of Context Headers</name> | |||
<t>The solution allows encrypting all or a subset of NSH Context | <t>The solution allows encrypting all or a subset of NSH Context | |||
Headers by Classifiers, NSH-aware SFs, and SFC proxies.</t> | Headers by Classifiers, NSH-aware SFs, and SFC proxies.</t> | |||
<t>As depicted in <xref target="encryption"/>, SFFs are not involved i | ||||
<t>As depicted in Table 2, SFFs are not involved in data | n data | |||
encryption.</t> | encryption.</t> | |||
<t><figure> | <table anchor="encryption"> | |||
<artwork><![CDATA[ +-----------------+-------------------------- | <name>Encryption Function Supported by SFC Data Plane Elements</name> | |||
----+------------------+ | <thead> | |||
| Data Plane | Base and Service Path | Context Header | | <tr> | |||
| Element | Headers Encryption | Encryption | | <th> Data Plane Element</th> | |||
+-----------------+------------------------------+------------------+ | <th> Base and Service Path Headers Encryption</th> | |||
| Classifier | No | Yes | | <th>Context Header Encryption</th> | |||
| SFF | No | No | | </tr> | |||
| NSH-aware SF | No | Yes | | </thead> | |||
| SFC Proxy | No | Yes | | ||||
| NSH-unaware SF | No | No | | ||||
+-----------------+------------------------------+------------------+ | ||||
Table 2: Encryption Function Supported by SFC Data Plane Elements]]></artwo | <tbody> | |||
rk> | <tr> | |||
</figure></t> | <td>Classifier</td> | |||
<td>No</td><td>Yes</td> | ||||
</tr><tr> | ||||
<td>SFF</td> | ||||
<td>No</td> | ||||
<td>No</td> | ||||
</tr><tr> | ||||
<td> NSH-aware SF</td> | ||||
<td>No</td> | ||||
<td>Yes</td> | ||||
</tr><tr> | ||||
<td>SFC Proxy</td> | ||||
<td> No </td><td>Yes</td> | ||||
</tr><tr> | ||||
<td>NSH-unaware SF</td> | ||||
<td>No</td> | ||||
<td>No</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>Classifier(s), NSH-aware SFs, and SFC proxies are instructed with | <t>Classifier(s), NSH-aware SFs, and SFC proxies are instructed with | |||
the set of Context Headers (privacy-sensitive metadata, typically) | the set of Context Headers (privacy-sensitive metadata, typically) | |||
that must be encrypted. Encryption keying material is only provided | that must be encrypted. Encryption keying material is only provided | |||
to these SFC data plane elements.</t> | to these SFC data plane elements.</t> | |||
<t>The control plane may indicate the set of SFC data plane elements | <t>The control plane may indicate the set of SFC data plane elements | |||
that are entitled to supply a given Context Header (e.g., in | that are entitled to supply a given Context Header (e.g., in | |||
reference to their identifiers as assigned within the SFC-enabled | reference to their identifiers as assigned within the SFC-enabled | |||
domain). It is out of the scope of this document to elaborate on how | domain). It is out of the scope of this document to elaborate on how | |||
such instructions are provided to the appropriate SFC data plane | such instructions are provided to the appropriate SFC data plane | |||
elements, nor to detail the structure used to store the | elements nor to detail the structure used to store the | |||
instructions.</t> | instructions.</t> | |||
<t>The Service Path Header (<xref target="RFC8300" section="2" section | ||||
<t>The Service Path Header (Section 2 of <xref | Format="of"/>) is not encrypted because SFFs use the Service | |||
target="RFC8300"></xref>) is not encrypted because SFFs use Service | Index (SI) in conjunction with the Service Path Identifier (SPI) for | |||
Index (SI) in conjunction with Service Path Identifier (SPI) for | ||||
determining the next SF in the path.</t> | determining the next SF in the path.</t> | |||
</section> | </section> | |||
<section title="Integrity Protection"> | <section numbered="true" toc="default"> | |||
<name>Integrity Protection</name> | ||||
<t>The solution provides integrity protection for the NSH data. Two | <t>The solution provides integrity protection for the NSH data. Two | |||
levels of assurance (LoAs) are supported.</t> | levels of assurance (LoAs) are supported.</t> | |||
<t>The first level of assurance is where all NSH data except the | <t>The first level of assurance is where all NSH data except the | |||
Base Header are integrity protected (<xref target="first"></xref>). | Base Header are integrity protected (<xref target="first" format="defa ult"/>). | |||
In this case, the NSH imposer may be a Classifier, an NSH-aware SF, | In this case, the NSH imposer may be a Classifier, an NSH-aware SF, | |||
or an SFC Proxy. SFFs are not provided with authentication material. | or an SFC Proxy. SFFs are not provided with authentication material. | |||
Further details are discussed in <xref target="enc1"></xref>.<figure | Further details are discussed in <xref target="enc1" format="default"/ | |||
align="center" anchor="first" title="First Level of Assurance"> | >.</t> | |||
<artwork align="center"><![CDATA[ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | <figure anchor="first"> | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+ | <name>First Level of Assurance</name> | |||
<artwork align="center" name="" type="" alt=""><![CDATA[ +-+-+-+-+ | ||||
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Transport Encapsulation | | | Transport Encapsulation | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | |||
| Base Header | | | | Base Header | | | |||
+->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ N | +->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ N | |||
| | Service Path Header | S | | | Service Path Header | S | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ H | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ H | |||
| | Context Header(s) | | | | | Context Header(s) | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | |||
| | Original Packet | | | | Original Packet | | |||
+->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | |||
+------Scope of integrity protected data | +------Scope of integrity-protected data | |||
]]></artwork> | ]]></artwork> | |||
</figure></t> | </figure> | |||
<t>The second level of assurance is where all NSH data, including | <t>The second level of assurance is where all NSH data, including | |||
the Base Header, are integrity protected (<xref | the Base Header, are integrity protected (<xref target="sec" format="d | |||
target="sec"></xref>). In this case, the NSH imposer may be a | efault"/>). In this case, the NSH imposer may be a | |||
Classifier, an NSH-aware SF, an SFF, or an SFC Proxy. Further | Classifier, an NSH-aware SF, an SFF, or an SFC Proxy. Further | |||
details are provided in <xref target="enc2"></xref>.</t> | details are provided in <xref target="enc2" format="default"/>.</t> | |||
<figure anchor="sec"> | ||||
<t><figure align="center" anchor="sec" | <name>Second Level of Assurance</name> | |||
title="Second Level of Assurance"> | <artwork align="center" name="" type="" alt=""><![CDATA[ +-+-+-+-+ | |||
<artwork align="center"><![CDATA[ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+- | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Transport Encapsulation | | | Transport Encapsulation | | |||
+->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | +->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | |||
| | Base Header | | | | | Base Header | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ N | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ N | |||
| | Service Path Header | S | | | Service Path Header | S | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ H | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ H | |||
| | Context Header(s) | | | | | Context Header(s) | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+... | |||
| | Original Packet | | | | Original Packet | | |||
+->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | |||
+----Scope of integrity protected data | +----Scope of integrity-protected data | |||
]]></artwork> | ]]></artwork> | |||
</figure></t> | </figure> | |||
<t>The integrity-protection scope is explicitly signaled to | ||||
<t>The integrity protection scope is explicitly signaled to | ||||
NSH-aware SFs, SFFs, and SFC proxies in the NSH by means of a | NSH-aware SFs, SFFs, and SFC proxies in the NSH by means of a | |||
dedicated MD Type (<xref target="new"></xref>).</t> | dedicated MD Type (<xref target="new" format="default"/>).</t> | |||
<t>In both levels of assurance, the Context Headers and the packet | <t>In both levels of assurance, the Context Headers and the packet | |||
on which the NSH is imposed are subject to integrity protection.</t> | on which the NSH is imposed are subject to integrity protection.</t> | |||
<t><xref target="integrity"/> classifies the data plane elements as be | ||||
ing involved or not involved in | ||||
providing integrity protection for the NSH.</t> | ||||
<t>Table 3 classifies the data plane elements as being involved in | <table anchor="integrity"> | |||
providing integrity protection for the NSH or not.</t> | <name>Integrity Protection Supported by SFC Data Plane Elements</name | |||
> | ||||
<thead> | ||||
<tr> | ||||
<th>Data Plane Element</th> | ||||
<th>Integrity Protection</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<t><figure> | <td> Classifier</td> | |||
<artwork><![CDATA[ +--------------------+----------------- | <td> Yes</td> | |||
-----------------+ | </tr><tr> | |||
| Data Plane Element | Integrity Protection | | ||||
+--------------------+----------------------------------+ | <td> SFF</td> | |||
| Classifier | Yes | | <td> No (first LoA); Yes (second LoA)</td> | |||
| SFF | No (first LoA); Yes (second LoA) | | </tr><tr> | |||
| NSH-aware SF | Yes | | ||||
| SFC Proxy | Yes | | <td> NSH-aware SF</td> | |||
| NSH-unaware SF | No | | <td>Yes</td> | |||
+--------------------+----------------------------------+ | </tr><tr> | |||
<td> SFC Proxy</td> | ||||
<td>Yes</td> | ||||
</tr><tr> | ||||
<td> NSH-unaware SF</td> | ||||
<td> No</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
Table 3: Integrity Protection Supported by SFC Data Plane Elements]]></artwo | ||||
rk> | ||||
</figure></t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="One Secret Key, Two Security Services"> | <name>One Secret Key, Two Security Services</name> | |||
<t>The Authenticated Encryption with Associated Data (AEAD) interface | <t>The Authenticated Encryption with Associated Data (AEAD) interface | |||
defined in Section 5 of <xref target="RFC5116"></xref> is used to | defined in <xref target="RFC5116" section="5" sectionFormat="of"/> is us ed to | |||
encrypt the Context Headers that carry sensitive metadata and to | encrypt the Context Headers that carry sensitive metadata and to | |||
provide integrity protection for the encrypted Context Headers.</t> | provide integrity protection for the encrypted Context Headers.</t> | |||
<t>The secondary keys "MAC_KEY" and "ENC_KEY" are generated from the inp | ||||
<t>The secondary keys MAC_KEY and ENC_KEY are generated from the input | ut | |||
secret key (K) as follows; each of these two keys is an octet | secret key (K) as follows; each of these two keys is an octet | |||
string:<list style="hanging"> | string:</t> | |||
<t hangText="MAC_KEY:">consists of the initial MAC_KEY_LEN octets | <dl newline="false" spacing="normal"> | |||
<dt>MAC_KEY:</dt> | ||||
<dd>Consists of the initial MAC_KEY_LEN octets | ||||
of K, in order. The MAC_KEY is used for calculating the message | of K, in order. The MAC_KEY is used for calculating the message | |||
integrity of the NSH data. In other words, the integrity | integrity of the NSH data. In other words, the integrity | |||
protection provided by the cryptographic mechanism is extended to | protection provided by the cryptographic mechanism is extended to | |||
also provide protection for the unencrypted Context Headers and | also provide protection for the unencrypted Context Headers and | |||
the packet on which the NSH is imposed.</t> | the packet on which the NSH is imposed.</dd> | |||
<dt>ENC_KEY:</dt> | ||||
<t hangText="ENC_KEY:">consists of the final ENC_KEY_LEN octets of | <dd>Consists of the final ENC_KEY_LEN octets of | |||
K, in order. The ENC_KEY is used as the symmetric encryption key | K, in order. The ENC_KEY is used as the symmetric encryption key | |||
for encrypting the Context Headers.</t> | for encrypting the Context Headers.</dd> | |||
</list></t> | </dl> | |||
<t>The Hashed Message Authentication Code (HMAC) algorithm discussed | ||||
<t>The Hashed Message Authentication Mode (HMAC) algorithm discussed | in <xref target="RFC4868" format="default"/> is used to protect the inte | |||
in <xref target="RFC4868"></xref> is used to protect the integrity of | grity of | |||
the NSH data. The algorithm for implementing and validating HMACs is | the NSH data. The algorithm for implementing and validating HMACs is | |||
provided in <xref target="RFC2104"></xref>.</t> | provided in <xref target="RFC2104" format="default"/>.</t> | |||
<t>The advantage of using both AEAD and HMAC algorithms (instead of | <t>The advantage of using both AEAD and HMAC algorithms (instead of | |||
just AEAD) is that NSH-aware SFs and SFC proxies only need to | just AEAD) is that NSH-aware SFs and SFC proxies only need to | |||
re-compute the message integrity of the NSH data after decrementing | recompute the message integrity of the NSH data after decrementing | |||
the Service Index (SI) and do not have to re-compute the ciphertext. | the SI and do not have to recompute the ciphertext. | |||
The other advantage is that SFFs do not have access to the ENC_KEY and | The other advantage is that SFFs do not have access to the ENC_KEY and | |||
cannot act on the encrypted Context Headers and (in the case of the | cannot act on the encrypted Context Headers, and (in the case of the | |||
second level of assurance) SFFs do have access to the MAC_KEY. | second level of assurance) SFFs do have access to the MAC_KEY. | |||
Similarly, an NSH-aware SF or SFC Proxy not allowed to decrypt the | Similarly, an NSH-aware SF or SFC Proxy not allowed to decrypt the | |||
Context Headers will not have access to the ENC_KEY.</t> | Context Headers will not have access to the ENC_KEY.</t> | |||
<t>The authenticated encryption algorithm or HMAC algorithm to be used | <t>The authenticated encryption algorithm or HMAC algorithm to be used | |||
by SFC data plane elements is typically controlled using the SFC | by SFC data plane elements is typically controlled using the SFC | |||
control plane. Mandatory to implement authenticated encryption and | control plane. Mandatory-to-implement authenticated encryption and | |||
HMAC algorithms are listed in <xref target="mti"></xref>.</t> | HMAC algorithms are listed in <xref target="mti" format="default"/>.</t> | |||
<t>The authenticated encryption process takes four inputs, each of | <t>The authenticated encryption process takes four inputs, each of | |||
which is an octet string: a secret key (ENC_KEY, referred to as K in | which is an octet string: a secret key (ENC_KEY, referred to as "K" in | |||
<xref target="RFC5116"></xref>), a plaintext (P), associated data (A) | <xref target="RFC5116" format="default"/>), a plaintext (P), associated | |||
(which contains the data to be authenticated, but not encrypted), and | data (A) | |||
(which contains the data to be authenticated but not encrypted), and | ||||
a nonce (N). A ciphertext (C) is generated as an output as discussed | a nonce (N). A ciphertext (C) is generated as an output as discussed | |||
in Section 2.1 of <xref target="RFC5116"></xref>.</t> | in <xref target="RFC5116" section="2.1" sectionFormat="of"/>.</t> | |||
<t>In order to decrypt and verify, the cipher takes ENC_KEY, | ||||
<t>In order to decrypt and verify, the cipher takes as input ENC_KEY, | N, A, and C as input. The output is either the plaintext or an error ind | |||
N, A, and C. The output is either the plaintext or an error indicating | icating | |||
that the decryption failed as described in Section 2.2 of <xref | that the decryption failed as described in <xref target="RFC5116" sectio | |||
target="RFC5116"></xref>.</t> | n="2.2" sectionFormat="of"/>.</t> | |||
</section> | </section> | |||
<section anchor="mti" numbered="true" toc="default"> | ||||
<section anchor="mti" | <name>Mandatory-to-Implement Authenticated Encryption and HMAC Algorithm | |||
title="Mandatory-to-Implement Authenticated Encryption and HMAC A | s</name> | |||
lgorithms"> | <t>Classifiers, NSH-aware SFs, and SFC proxies <bcp14>MUST</bcp14> imple | |||
<t>Classifiers, NSH-aware SFs, and SFC proxies MUST implement the | ment the | |||
AES_128_GCM <xref target="GCM"></xref><xref target="RFC5116"></xref> | AES_128_GCM <xref target="GCM" format="default"/><xref target="RFC5116" | |||
algorithm and SHOULD implement the AES_192_GCM and AES_256_GCM | format="default"/> | |||
algorithm and <bcp14>SHOULD</bcp14> implement the AES_192_GCM and AES_25 | ||||
6_GCM | ||||
algorithms.</t> | algorithms.</t> | |||
<t>Classifiers, NSH-aware SFs, and SFC proxies <bcp14>MUST</bcp14> imple | ||||
<t>Classifiers, NSH-aware SFs, and SFC proxies MUST implement the | ment the | |||
HMAC- SHA-256-128 algorithm and SHOULD implement the HMAC-SHA-384-192 | HMAC- SHA-256-128 algorithm and <bcp14>SHOULD</bcp14> implement the HMAC | |||
-SHA-384-192 | ||||
and HMAC-SHA-512-256 algorithms.</t> | and HMAC-SHA-512-256 algorithms.</t> | |||
<t>SFFs <bcp14>MAY</bcp14> implement the aforementioned cipher suites an | ||||
d HMAC | ||||
algorithms. | ||||
</t> | ||||
<t>SFFs MAY implement the aforementioned cipher suites and HMAC | <t indent="3"> Note: The use of the AES_128_CBC_HMAC_SHA_256 algorithm wo | |||
algorithms.</t> | uld | |||
have avoided the need for a second 128-bit authentication tag, but due | ||||
to the nature of how Cipher Block Chaining (CBC) mode operates, | ||||
AES_128_CBC_HMAC_SHA_256 allows for the malleability of plaintexts. This | ||||
malleability allows for attackers that know the Message Authentication Co | ||||
de (MAC) key but not the | ||||
encryption key to make changes in the ciphertext and, if parts of the | ||||
plaintext are known, create arbitrary blocks of plaintext. This | ||||
specification mandates the use of separate AEAD and MAC protections to | ||||
prevent this type of attack. | ||||
</t> | ||||
<t><list style="hanging"> | ||||
<t hangText="Note:">The use of AES_128_CBC_HMAC_SHA_256 algorithm | ||||
would have avoided the need for a second 128-bit authentication | ||||
tag, but due to the nature of how Cipher Block Chaining (CBC) mode | ||||
operates, AES_128_CBC_HMAC_SHA_256 allows for malleability of | ||||
plaintexts. This malleability allows for attackers that know the | ||||
MAC key but not the encryption key to make changes in the | ||||
ciphertext and, if parts of the plaintext are known, create | ||||
arbitrary blocks of plaintext. This specification mandates the use | ||||
of separate AEAD and MAC protections to prevent this type of | ||||
attack.</t> | ||||
</list></t> | ||||
</section> | </section> | |||
<section anchor="kms" numbered="true" toc="default"> | ||||
<section anchor="kms" title="Key Management"> | <name>Key Management</name> | |||
<t>The procedure for the allocation/provisioning of secret keys (K) | <t>The procedure for the allocation/provisioning of secret keys (K) | |||
and authenticated encryption algorithm or MAC_KEY and HMAC algorithm | and the authenticated encryption algorithm or MAC_KEY and HMAC algorithm | |||
is outside the scope of this specification. As such, this | is outside the scope of this specification. As such, this | |||
specification does not mandate the support of any specific | specification does not mandate the support of any specific | |||
mechanism.</t> | mechanism.</t> | |||
<t>The document does not assume nor preclude the following:</t> | ||||
<t>The document does not assume nor preclude the following:<list | <ul spacing="normal"> | |||
style="symbols"> | <li>The same keying material is used for all the service functions | |||
<t>The same keying material is used for all the service functions | used within an SFC-enabled domain.</li> | |||
used within an SFC-enabled domain.</t> | <li>Distinct keying material is used per SFP by all involved SFC | |||
data path elements.</li> | ||||
<t>Distinct keying material is used per SFP by all involved SFC | <li>Per-tenant keys are used.</li> | |||
data path elements.</t> | </ul> | |||
<t>Per-tenant keys are used.</t> | ||||
</list></t> | ||||
<t>In order to accommodate deployments relying upon keying material | <t>In order to accommodate deployments relying upon keying material | |||
per SFC/SFP and also the need to update keys after encrypting NSH data | per SFC/SFP and also the need to update keys after encrypting NSH data | |||
for a certain amount of time, this document uses key identifiers to | for a certain amount of time, this document uses key identifiers to | |||
unambiguously identify the appropriate keying material and associated | unambiguously identify the appropriate keying material and associated | |||
algorithms for MAC and encryption. This use of in-band identifiers | algorithms for MAC and encryption. This use of in-band identifiers | |||
addresses the problem of synchronization of keying material.</t> | addresses the problem of the synchronization of keying material.</t> | |||
<t>Additional information on manual vs. automated key management and | <t>Additional information on manual vs. automated key management and | |||
when one should be used over the other can be found in <xref | when one should be used over the other can be found in <xref target="RFC | |||
target="RFC4107"></xref>.</t> | 4107" format="default"/>.</t> | |||
<t>The risk involved in using a group-shared symmetric key increases | <t>The risk involved in using a group-shared symmetric key increases | |||
with the size of the group to which it is shared. Additional security | with the size of the group to which it is shared. Additional security | |||
issues are discussed in <xref target="Security"></xref>.</t> | issues are discussed in <xref target="Security" format="default"/>.</t> | |||
</section> | </section> | |||
<section anchor="newch" numbered="true" toc="default"> | ||||
<section anchor="newch" title="New NSH Variable-Length Context Headers"> | <name>New NSH Variable-Length Context Headers</name> | |||
<t>New NSH Variable-Length Context Headers are defined in <xref | <t>New NSH Variable-Length Context Headers are defined in <xref target=" | |||
target="new"></xref> for NSH data integrity protection and, | new" format="default"/> for NSH data integrity protection and, | |||
optionally, encryption of Context Headers carrying sensitive metadata. | optionally, encryption of Context Headers carrying sensitive metadata. | |||
Concretely, an NSH imposer includes (1) the key identifier to identify | Concretely, an NSH imposer includes (1) the key identifier to identify | |||
the keying material, (2) the timestamp to protect against replay | the keying material, (2) the timestamp to protect against replay | |||
attacks (<xref target="time"></xref>), and (3) the Message | attacks (<xref target="time" format="default"/>), and (3) MAC for the ta | |||
Authentication Code (MAC) for the target NSH data (depending on the | rget NSH data (depending on the | |||
integrity protection scope) calculated using the MAC_KEY and | integrity-protection scope) calculated using MAC_KEY and, | |||
optionally Context Headers encrypted using ENC_KEY.</t> | optionally, Context Headers encrypted using ENC_KEY.</t> | |||
<t>An SFC data plane element that needs to check the integrity of the | <t>An SFC data plane element that needs to check the integrity of the | |||
NSH data uses MAC_KEY and the HMAC algorithm for the key identifier | NSH data uses the MAC_KEY and HMAC algorithm for the key identifier | |||
being carried in the NSH.</t> | being carried in the NSH.</t> | |||
<t>An NSH-aware SF or SFC Proxy that needs to decrypt some Context | <t>An NSH-aware SF or SFC Proxy that needs to decrypt some Context | |||
Headers uses ENC_KEY and the decryption algorithm for the key | Headers uses ENC_KEY and the decryption algorithm for the key | |||
identifier being carried in the NSH.</t> | identifier being carried in the NSH.</t> | |||
<t><xref target="prorules" format="default"/> specifies the detailed | ||||
<t><xref target="prorules"></xref> specifies the detailed | ||||
procedure.</t> | procedure.</t> | |||
</section> | </section> | |||
<section anchor="nsh-in-nsh" numbered="true" toc="default"> | ||||
<section anchor="nsh-in-nsh" title="Encapsulation of NSH within NSH"> | <name>Encapsulation of NSH within NSH</name> | |||
<t>As discussed in Section 3 of <xref target="RFC8459"></xref>, an | <t>As discussed in <xref target="RFC8459" section="3" sectionFormat="of" | |||
SFC-enabled domain (called, upper-level domain) may be decomposed into | />, an | |||
many sub-domains (called, lower-level domains). In order to avoid | SFC-enabled domain (called an upper-level domain) may be decomposed into | |||
maintaining state to restore back upper-level NSH information at the | many sub-domains (called lower-level domains). In order to avoid | |||
maintaining state to restore upper-level NSH information at the | ||||
boundaries of lower-level domains, two NSH levels are used: an | boundaries of lower-level domains, two NSH levels are used: an | |||
Upper-NSH which is imposed at the boundaries of the upper-level domain | Upper-NSH that is imposed at the boundaries of the upper-level domain | |||
and a Lower-NSH that is pushed by the Classifier of a lower-level | and a Lower-NSH that is pushed by the Classifier of a lower-level | |||
domain in front of the original NSH (<xref target="nest"></xref>). As | domain in front of the original NSH (<xref target="nest" format="default "/>). As | |||
such, the Upper-NSH information is carried along the lower-level chain | such, the Upper-NSH information is carried along the lower-level chain | |||
without modification. The packet is forwarded in the top-level domain | without modification. The packet is forwarded in the top-level domain | |||
according to the Upper-NSH, while it is forwarded according to the | according to the Upper-NSH, while it is forwarded according to the | |||
Lower-NSH in a lower-level domain.</t> | Lower-NSH in a lower-level domain.</t> | |||
<figure anchor="nest"> | ||||
<t><figure align="center" anchor="nest" | <name>Encapsulation of NSH within NSH</name> | |||
title="Encapsulation of NSH within NSH"> | <artwork align="center" name="" type="" alt=""><![CDATA[ | |||
<artwork align="center"><![CDATA[ +------------------------------- | +---------------------------------+ | |||
--+ | ||||
| Transport Encapsulation | | | Transport Encapsulation | | |||
+->+---------------------------------+ | +->+---------------------------------+ | |||
| | Lower-NSH Header | | | | Lower-NSH Header | | |||
| +---------------------------------+ | | +---------------------------------+ | |||
| | Upper-NSH Header | | | | Upper-NSH Header | | |||
| +---------------------------------+ | | +---------------------------------+ | |||
| | Original Packet | | | | Original Packet | | |||
+->+---------------------------------+ | +->+---------------------------------+ | |||
| | | | |||
| | | | |||
+----Scope of NSH security protection | +----Scope of NSH security protection | |||
provided by a lower-level domain | provided by a lower-level domain | |||
]]></artwork> | ]]></artwork> | |||
</figure></t> | </figure> | |||
<t>SFC data plane elements of a lower-level domain include the | <t>SFC data plane elements of a lower-level domain include the | |||
Upper-NSH when computing the MAC.</t> | Upper-NSH when computing the MAC.</t> | |||
<t>Keying material used at the upper-level domain <bcp14>SHOULD NOT</bcp | ||||
<t>Keying material used at the upper-level domain SHOULD NOT be the | 14> be the | |||
same as the one used by a lower-level domain.</t> | same as the one used by a lower-level domain.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="new" numbered="true" toc="default"> | ||||
<section anchor="new" title="New NSH Variable-Length Context Headers"> | <name>New NSH Variable-Length Context Headers</name> | |||
<t>This section specifies the format of new Variable-Length Context | <t>This section specifies the format of new Variable-Length Context | |||
headers that are used for NSH integrity protection and, optionally, | Headers that are used for NSH integrity protection and, optionally, | |||
Context Headers encryption.</t> | Context Header encryption.</t> | |||
<t>In particular, this section defines two "MAC and Encrypted Metadata" | <t>In particular, this section defines two "MAC and Encrypted Metadata" | |||
Context Headers; each having specific deployment constraints. Unlike | Context Headers, each having specific deployment constraints. Unlike | |||
<xref target="enc1"></xref>, the level of assurance provided in <xref | <xref target="enc1" format="default"/>, the level of assurance provided | |||
target="enc2"></xref> requires sharing MAC_KEY with SFFs. Both Context | in <xref target="enc2" format="default"/> requires sharing MAC_KEY with | |||
headers have the same format as shown in <xref target="mac"></xref>.</t> | SFFs. Both Context Headers have the same format as shown in <xref | |||
target="mac" format="default"/>.</t> | ||||
<t><figure align="center" anchor="mac" | <figure anchor="mac"> | |||
title="MAC and Encrypted Metadata Context Header"> | <name>MAC and Encrypted Metadata Context Header</name> | |||
<artwork align="center"><![CDATA[ 0 1 | <artwork align="center" name="" type="" alt=""><![CDATA[ 0 | |||
2 3 | 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Metadata Class | Type |U| Length | | | Metadata Class | Type |U| Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Key Id Len | Key Identifier (Variable) ~ | | Key Id Len | Key Identifier (Variable) ~ | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
~ Timestamp (8 bytes) ~ | ~ Timestamp (8 bytes) ~ | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Nonce Length | Nonce (Variable) ~ | | Nonce Length | Nonce (Variable) ~ | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Message Authentication Code and optional Encrypted | | | Message Authentication Code and optional Encrypted | | |||
~ Context Headers (Variable) ~ | ~ Context Headers (Variable) ~ | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></art work> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></art work> | |||
</figure></t> | </figure> | |||
<t>The "MAC and Encrypted Metadata" Context Headers are padded out to a | <t>The "MAC and Encrypted Metadata" Context Headers are padded out to a | |||
multiple of 4 bytes as per Section 2.2 of <xref | multiple of 4 bytes as per <xref target="RFC8300" section="2.2" sectionFor | |||
target="RFC8300"></xref>. The "MAC and Encrypted Metadata" Context | mat="of"/>. | |||
Header, if included, MUST always be the last Context Header.</t> | The "MAC and Encrypted Metadata" Context | |||
Header, if included, <bcp14>MUST</bcp14> always be the last Context Header | ||||
<section anchor="enc1" title="MAC#1 Context Header"> | .</t> | |||
<t>MAC#1 Context Header is a variable-length Context Header that | <section anchor="enc1" numbered="true" toc="default"> | |||
carries the Message Authentication Code (MAC) for the Service Path | <name>MAC#1 Context Header</name> | |||
<t>The MAC#1 Context Header is a Variable-Length Context Header that | ||||
carries MAC for the Service Path | ||||
Header, Context Headers, and the inner packet on which NSH is imposed, | Header, Context Headers, and the inner packet on which NSH is imposed, | |||
calculated using MAC_KEY, and optionally Context Headers encrypted | calculated using MAC_KEY and, optionally, Context Headers encrypted | |||
using ENC_KEY. The scope of the integrity protection provided by this | using ENC_KEY. The scope of the integrity protection provided by this | |||
Context Header is depicted in <xref target="scope1"></xref>.</t> | Context Header is depicted in <xref target="scope1" format="default"/>.< | |||
/t> | ||||
<t>This MAC scheme does not require sharing MAC_KEY with SFFs. It does | <t>This MAC scheme does not require sharing MAC_KEY with SFFs. It does | |||
not require to re-compute the MAC by each SFF because of TTL | not require recomputing the MAC by each SFF because of TTL | |||
processing. <xref target="mac1"></xref> discusses the possible threat | processing. <xref target="mac1" format="default"/> discusses the possibl | |||
e threat | ||||
associated with this level of assurance.</t> | associated with this level of assurance.</t> | |||
<figure anchor="scope1"> | ||||
<figure align="center" anchor="scope1" title="Scope of MAC#1"> | <name>Scope of MAC#1</name> | |||
<artwork align="center"><![CDATA[ 0 1 | <artwork align="center" name="" type="" alt=""><![CDATA[ 0 | |||
2 3 | 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|Ver|O|U| TTL | Length |U|U|U|U|MD Type| Next Protocol | | |Ver|O|U| TTL | Length |U|U|U|U|MD Type| Next Protocol | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<--+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<--+ | |||
| Service Path Identifier | Service Index | | | | Service Path Identifier | Service Index | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
~ Variable-Length Unencrypted Context Headers (opt.) ~ | | ~ Variable-Length Unencrypted Context Headers (opt.) ~ | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| Metadata Class | Type |U| Length | | | | Metadata Class | Type |U| Length | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
skipping to change at line 714 ¶ | skipping to change at line 702 ¶ | |||
+->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| ~ Encrypted Context Headers (opt.) ~ | | | ~ Encrypted Context Headers (opt.) ~ | | |||
+->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| ~ Message Authentication Code ~ | | | ~ Message Authentication Code ~ | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| | | | | | | | | | |||
| ~ Inner Packet on which NSH is imposed ~ | | | ~ Inner Packet on which NSH is imposed ~ | | |||
| | | | | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<--| | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<--| | |||
| | | | | | |||
| Integrity Protection Scope ----+ | | Integrity-Protection Scope ----+ | |||
+----Encrypted Data | +----Encrypted Data | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t></t> | <t>In reference to <xref target="mac" format="default"/>, the descriptio | |||
n of the | ||||
<t>In reference to <xref target="mac"></xref>, the description of the | fields is as follows:</t> | |||
fields is as follows:<list style="hanging"> | <dl newline="false" spacing="normal" indent="12"> | |||
<t hangText="Metadata Class:">MUST be set to 0x0 (Section 2.5.1 of | <dt>Metadata Class:</dt> | |||
<xref target="RFC8300"></xref>).</t> | <dd><bcp14>MUST</bcp14> be set to 0x0 (<xref target="RFC8300" section= | |||
"2.2" sectionFormat="of"/>).</dd> | ||||
<t hangText="Type:">TBD1 (See <xref target="IANA"></xref>)</t> | <dt>Type:</dt> | |||
<dd>0x02 (see <xref target="IANA" format="default"/>).</dd> | ||||
<t hangText="U:">Unassigned bit (Section 2.5.1 of <xref | <dt>U:</dt> | |||
target="RFC8300"></xref>).</t> | <dd>Unassigned bit (<xref target="RFC8300" section="2.5.1" sectionForm | |||
at="of"/>).</dd> | ||||
<t hangText="Length:">Indicates the length of the variable-length | <dt>Length:</dt> | |||
metadata, in bytes. Padding considerations are discussed in | <dd>Indicates the length of the variable-length | |||
Section 2.5.1 of <xref target="RFC8300"></xref>.</t> | metadata in bytes. Padding considerations are discussed in | |||
<xref target="RFC8300" section="2.5.1" sectionFormat="of"/>.</dd> | ||||
<t hangText="Key Id Len:">Variable. Carries the length of the key | <dt>Key Id Len:</dt> | |||
identifier, in octets.</t> | <dd>Variable. Carries the length of the key | |||
identifier in octets.</dd> | ||||
<t hangText="Key Identifier:">Carries a variable-length Key | <dt>Key Identifier:</dt> | |||
<dd>Carries a variable-length Key | ||||
Identifier object used to identify and deliver keys to SFC data | Identifier object used to identify and deliver keys to SFC data | |||
plane elements. This identifier is helpful to accommodate | plane elements. This identifier is helpful for accommodating | |||
deployments relying upon keying material per SFC/SFP. The key | deployments relying upon keying material per SFC/SFP. The key | |||
identifier helps in resolving the problem of synchronization of | identifier helps to resolve the problem of synchronization of | |||
keying material. A single key identifier is used to lookup both | keying material. A single key identifier is used to look up both | |||
the ENC_KEY and the MAC_KEY associated with a key, and the | the ENC_KEY and the MAC_KEY associated with a key, and the | |||
corresponding encryption and MAC algorithms used with those | corresponding encryption and MAC algorithms used with those | |||
keys.</t> | keys.</dd> | |||
<dt>Timestamp:</dt> | ||||
<t hangText="Timestamp:">Refer to <xref target="timef"></xref> for | <dd>Refer to <xref target="timef" format="default"/> for | |||
more details about the structure of this field.</t> | more details about the structure of this field.</dd> | |||
<dt>Nonce Length:</dt> | ||||
<t hangText="Nonce Length:">Carries the length of the Nonce. If | <dd>Carries the length of the Nonce. If | |||
the Context Headers are only integrity protected, "Nonce Length" | the Context Headers are only integrity protected, "Nonce Length" | |||
is set to zero (that is, no "Nonce" is included).</t> | is set to zero (that is, no "Nonce" is included).</dd> | |||
<dt>Nonce:</dt> | ||||
<t hangText="Nonce:">Carries the Nonce for the authenticated | <dd>Carries the Nonce for the authenticated | |||
encryption operation (Section 3.1 of <xref | encryption operation (<xref target="RFC5116" section="3.1" sectionFo | |||
target="RFC5116"></xref>).</t> | rmat="of"/>).</dd> | |||
<dt>Encrypted Context Headers:</dt> | ||||
<t hangText="Encrypted Context Headers:">Carries the optional | <dd>Carries the optional | |||
encrypted Context Headers.</t> | encrypted Context Headers.</dd> | |||
<dt>Message Authentication Code: </dt> | ||||
<t hangText="Message Authentication Code: ">Covers the entire NSH | <dd>Covers the entire NSH | |||
data, excluding the Base header.</t> | data, excluding the Base Header.</dd> | |||
</list></t> | </dl> | |||
</section> | </section> | |||
<section anchor="enc2" numbered="true" toc="default"> | ||||
<section anchor="enc2" title="MAC#2 Context Header"> | <name>MAC#2 Context Header</name> | |||
<t>MAC#2 Context Header is a variable-length Context Header that | <t>The MAC#2 Context Header is a Variable-Length Context Header that | |||
carries the MAC for the entire NSH data calculated using MAC_KEY and | carries the MAC for the entire NSH data calculated using MAC_KEY and, | |||
optionally Context Headers encrypted using ENC_KEY. The scope of the | optionally, Context Headers encrypted using ENC_KEY. The scope of the | |||
integrity protection provided by this Context Header is depicted in | integrity protection provided by this Context Header is depicted in | |||
<xref target="scope2"></xref>.</t> | <xref target="scope2" format="default"/>.</t> | |||
<figure anchor="scope2"> | ||||
<figure align="center" anchor="scope2" title="Scope of MAC#2"> | <name>Scope of MAC#2</name> | |||
<artwork align="center"><![CDATA[ 0 1 | <artwork align="center" name="" type="" alt=""><![CDATA[ 0 | |||
2 3 | 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<--+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<--+ | |||
|Ver|O|U| TTL | Length |U|U|U|U|MD Type| Next Protocol | | | |Ver|O|U| TTL | Length |U|U|U|U|MD Type| Next Protocol | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| Service Path Identifier | Service Index | | | | Service Path Identifier | Service Index | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
~ Variable-Length Unencrypted Context Headers (opt.) ~ | | ~ Variable-Length Unencrypted Context Headers (opt.) ~ | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| Metadata Class | Type |U| Length | | | | Metadata Class | Type |U| Length | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
skipping to change at line 801 ¶ | skipping to change at line 786 ¶ | |||
+->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| ~ Encrypted Context Headers (opt.) ~ | | | ~ Encrypted Context Headers (opt.) ~ | | |||
+->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| ~ Message Authentication Code ~ | | | ~ Message Authentication Code ~ | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| | | | | | | | | | |||
| ~ Inner Packet on which NSH is imposed ~ | | | ~ Inner Packet on which NSH is imposed ~ | | |||
| | | | | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<--| | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<--| | |||
| | | | | | |||
| Integrity Protection Scope ----+ | | Integrity-Protection Scope ----+ | |||
+----Encrypted Data | +----Encrypted Data | |||
]]></artwork> | ]]></artwork> | |||
</figure> | </figure> | |||
<t></t> | <t>In reference to <xref target="mac" format="default"/>, the descriptio | |||
n of the | ||||
<t>In reference to <xref target="mac"></xref>, the description of the | fields is as follows:</t> | |||
fields is as follows:<list style="hanging"> | <dl newline="false" spacing="normal" indent="12"> | |||
<t hangText="Metadata Class:">MUST be set to 0x0 (Section 2.5.1 of | <dt>Metadata Class:</dt> | |||
<xref target="RFC8300"></xref>).</t> | <dd><bcp14>MUST</bcp14> be set to 0x0 (<xref target="RFC8300" section= | |||
"2.2" sectionFormat="of"/>).</dd> | ||||
<t hangText="Type:">TBD2 (See <xref target="IANA"></xref>)</t> | <dt>Type:</dt> | |||
<dd>0x03 (see <xref target="IANA" format="default"/>).</dd> | ||||
<t hangText="U:">Unassigned bit (Section 2.5.1 of <xref | <dt>U:</dt> | |||
target="RFC8300"></xref>).</t> | <dd>Unassigned bit (<xref target="RFC8300" section="2.5.1" sectionForm | |||
at="of"/>).</dd> | ||||
<t hangText="Length:">Indicates the length of the variable-length | <dt>Length:</dt> | |||
metadata, in bytes. Padding considerations are discussed in | <dd>Indicates the length of the variable-length | |||
Section 2.5.1 of <xref target="RFC8300"></xref>.</t> | metadata in bytes. Padding considerations are discussed in | |||
<xref target="RFC8300" section="2.5.1" sectionFormat="of"/>.</dd> | ||||
<t hangText="Key Id Len:">See <xref target="enc1"></xref>.</t> | <dt>Key Id Len:</dt> | |||
<dd>See <xref target="enc1" format="default"/>.</dd> | ||||
<t hangText="Key Identifier:">See <xref target="enc1"></xref>.</t> | <dt>Key Identifier:</dt> | |||
<dd>See <xref target="enc1" format="default"/>.</dd> | ||||
<t hangText="Timestamp:">See <xref target="timef"></xref>.</t> | <dt>Timestamp:</dt> | |||
<dd>See <xref target="timef" format="default"/>.</dd> | ||||
<t hangText="Nonce Length:">See <xref target="enc1"></xref>.</t> | <dt>Nonce Length:</dt> | |||
<dd>See <xref target="enc1" format="default"/>.</dd> | ||||
<t hangText="Nonce:">See <xref target="enc1"></xref>.</t> | <dt>Nonce:</dt> | |||
<dd>See <xref target="enc1" format="default"/>.</dd> | ||||
<t hangText="Encrypted Context Headers:">Carries the optional | <dt>Encrypted Context Headers:</dt> | |||
encrypted Context Headers.</t> | <dd>Carries the optional | |||
encrypted Context Headers.</dd> | ||||
<t hangText="Message Authentication Code:">Covers the entire NSH | <dt>Message Authentication Code:</dt> | |||
data.</t> | <dd>Covers the entire NSH | |||
</list></t> | data.</dd> | |||
</dl> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="timef" numbered="true" toc="default"> | ||||
<section anchor="timef" title="Timestamp Format"> | <name>Timestamp Format</name> | |||
<t>This section follows the template provided in Section 3 of <xref | <t>This section follows the template provided in <xref target="RFC8877" se | |||
target="RFC8877"></xref>.</t> | ction="3" sectionFormat="of"/>.</t> | |||
<t>The format of the Timestamp field introduced in <xref target="new" form | ||||
<t>The format of the Timestamp field introduced in <xref | at="default"/> is depicted in <xref target="tf" format="default"/>.</t> | |||
target="new"></xref> is depicted in <xref target="tf"></xref>.</t> | <figure anchor="tf"> | |||
<name>Timestamp Field Format</name> | ||||
<t><figure anchor="tf" title="Timestamp Field Format"> | <artwork align="center" name="" type="" alt=""><![CDATA[ 0 | |||
<artwork align="center"><![CDATA[ 0 1 | 1 2 3 | |||
2 3 | ||||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Seconds | | | Seconds | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Fraction | | | Fraction | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></art work> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></art work> | |||
</figure>Timestamp field format:<list style="empty"> | </figure> | |||
<t>Seconds: specifies the integer portion of the number of seconds | ||||
since the epoch.</t> | ||||
<t>+ Size: 32 bits.</t> | ||||
<t>+ Units: seconds.</t> | <dl spacing="normal" newline="true"> | |||
<dt>Timestamp field format:</dt> | ||||
<dd> | ||||
<dl> | ||||
<dt>Seconds:</dt><dd>Specifies the integer portion of the number of seco | ||||
nds | ||||
since the epoch.</dd> | ||||
<dt>+ Size:</dt><dd> 32 bits</dd> | ||||
<dt>+ Units:</dt><dd> Seconds</dd> | ||||
<dt>Fraction:</dt><dd> Specifies the fractional portion of the number of | ||||
seconds since the epoch.</dd> | ||||
<dt>+ Size:</dt><dd> 32 bits</dd> | ||||
<dt>+ Units:</dt><dd>The unit is 2<sup>(-32)</sup> seconds, which is rou | ||||
ghly equal to | ||||
233 picoseconds.</dd> | ||||
</dl> | ||||
</dd> | ||||
</dl> | ||||
<t>Fraction: specifies the fractional portion of the number of | <dl newline="true"> | |||
seconds since the epoch.</t> | ||||
<t>+ Size: 32 bits.</t> | <dt>Epoch:</dt> | |||
<dd>The epoch is 1970-01-01T00:00 in UTC time. Note that this epoch | ||||
value is different from the one used in <xref target="RFC5905" | ||||
section="6" sectionFormat="of"/> (which will wrap around in | ||||
2036).</dd> | ||||
<t>+ Units: the unit is 2^(-32) seconds, which is roughly equal to | <dt>Leap seconds:</dt> | |||
233 picoseconds.</t> | <dd>This timestamp format is affected by leap seconds. The timestamp | |||
</list></t> | represents the number of seconds elapsed since the epoch minus the | |||
number of leap seconds.</dd> | ||||
<t>Epoch:<list style="empty"> | <dt>Resolution:</dt> | |||
<t>The epoch is 1970-01-01T00:00 in UTC time. Note this epoch value | ||||
is different from the one used in Section 6 of <xref | ||||
target="RFC5905"></xref> (which will wrap around in 2036).</t> | ||||
</list></t> | ||||
<t>Leap seconds:<list style="empty"> | <dd>The resolution is 2<sup>(-32)</sup> seconds.</dd> | |||
<t>This timestamp format is affected by leap seconds. The timestamp | ||||
represents the number of seconds elapsed since the epoch minus the | ||||
number of leap seconds.</t> | ||||
</list></t> | ||||
<t>Resolution:<list style="empty"> | <dt>Wraparound:</dt> | |||
<t>The resolution is 2^(-32) seconds.</t> | ||||
</list></t> | ||||
<t>Wraparound:<list style="empty"> | <dd>This time format wraps around every 2<sup>32</sup> seconds, which is | |||
<t>This time format wraps around every 2^32 seconds, which is | ||||
roughly 136 years. The next wraparound will occur in the year | roughly 136 years. The next wraparound will occur in the year | |||
2106.</t> | 2106.</dd> | |||
</list>Synchronization aspects:<list style="empty"> | ||||
<t>It is assumed that SFC data plane elements are synchronized to | <dt>Synchronization aspects:</dt> | |||
<dd>It is assumed that SFC data plane elements are synchronized to | ||||
UTC using a synchronization mechanism that is outside the scope of | UTC using a synchronization mechanism that is outside the scope of | |||
this document. In typical deployments, SFC data plane elements use | this document. In typical deployments, SFC data plane elements use | |||
NTP <xref target="RFC5905"></xref> for synchronization. Thus, the | NTP <xref target="RFC5905" format="default"/> for synchronization. Thu s, the | |||
timestamp may be derived from the NTP-synchronized clock, allowing | timestamp may be derived from the NTP-synchronized clock, allowing | |||
the timestamp to be measured with respect to the clock of an NTP | the timestamp to be measured with respect to the clock of an NTP | |||
server. Since this time format is specified in terms of UTC, it is | server. Since this time format is specified in terms of UTC, it is | |||
affected by leap seconds (in a manner analogous to the NTP time | affected by leap seconds (in a manner analogous to the NTP time | |||
format, which is similar). Therefore, the value of a timestamp | format, which is similar). Therefore, the value of a timestamp | |||
during or slightly after a leap second may be temporarily | during or slightly after a leap second may be temporarily | |||
inaccurate.</t> | inaccurate.</dd> | |||
</list></t> | </dl> | |||
</section> | </section> | |||
<section anchor="prorules" numbered="true" toc="default"> | ||||
<section anchor="prorules" title="Processing Rules"> | <name>Processing Rules</name> | |||
<t>The following subsections describe the processing rules for integrity | <t>The following subsections describe the processing rules for | |||
protected NSH and optionally encrypted Context Headers.</t> | integrity-protected NSH and, optionally, encrypted Context Headers.</t> | |||
<section anchor="gen" numbered="true" toc="default"> | ||||
<section anchor="gen" title="Generic Behavior"> | <name>Generic Behavior</name> | |||
<t>This document adheres to the recommendations in Section 8.1 of | <t>This document adheres to the recommendations in <xref target="RFC8300 | |||
<xref target="RFC8300"></xref> for handling the Context Headers at | " section="8.1" sectionFormat="of"/> for handling the Context Headers at | |||
both ingress and egress SFC boundary nodes (i.e., to strip the entire | both ingress and egress SFC boundary nodes (i.e., to strip the entire | |||
NSH, including Context Headers).</t> | NSH, including Context Headers).</t> | |||
<t>Failures of a Classifier to inject the Context Headers defined in | ||||
<t>Failures of a classifier to inject the Context Headers defined in | this document <bcp14>SHOULD</bcp14> be logged locally while a notificati | |||
this document SHOULD be logged locally while a notification alarm MAY | on alarm <bcp14>MAY</bcp14> | |||
be sent to an SFC control element. Failures of an NSH-aware node to | be sent to an SFC control element. Failures of an NSH-aware node to | |||
validate the integrity of the NSH data MUST cause that packet to be | validate the integrity of the NSH data <bcp14>MUST</bcp14> cause that pa | |||
discarded while a notification alarm MAY be sent to an SFC control | cket to be | |||
discarded while a notification alarm <bcp14>MAY</bcp14> be sent to an SF | ||||
C control | ||||
element. The details of sending notification alarms (i.e., the | element. The details of sending notification alarms (i.e., the | |||
parameters that affect the transmission of the notification alarms | parameters that affect the transmission of the notification alarms | |||
depending on the information in the context header such as frequency, | depending on the information in the Context Header such as frequency, | |||
thresholds, and content in the alarm) SHOULD be configurable.</t> | thresholds, and content in the alarm) <bcp14>SHOULD</bcp14> be configura | |||
ble.</t> | ||||
<t>NSH-aware SFs and SFC proxies MAY be instructed to strip some | <t>NSH-aware SFs and SFC proxies <bcp14>MAY</bcp14> be instructed to | |||
encrypted Context Headers from the packet or to pass the data to the | strip some encrypted Context Headers from the packet or to pass the | |||
next SF in the service function chain after processing the content of | data to the next SF in the service function chain after processing the | |||
the Context Headers. If no instruction is provided, the default | content of the Context Headers. If no instruction is provided, the | |||
behavior for intermediary NSH-aware nodes is to maintain such Context | default behavior for intermediary NSH-aware nodes is to maintain such | |||
Headers so that the information can be passed to next NSH-aware hops. | Context Headers so that the information can be passed to the next | |||
NSH-aware SFs and SFC proxies MUST re-apply the integrity protection | NSH-aware hops. NSH-aware SFs and SFC proxies <bcp14>MUST</bcp14> | |||
if any modification is made to the Context Headers (e.g., strip a | reapply the integrity protection if any modification is made to the | |||
Context Header, update the content of an existing Context Header, | Context Headers (e.g., strip a Context Header, update the content of | |||
insert a new Context Header).</t> | an existing Context Header, insert a new Context Header).</t> | |||
<t>An NSH-aware SF or SFC Proxy that is not allowed to decrypt any | <t>An NSH-aware SF or SFC Proxy that is not allowed to decrypt any | |||
Context Headers MUST NOT be given access to the ENC_KEY.</t> | Context Headers <bcp14>MUST NOT</bcp14> be given access to the ENC_KEY.< | |||
/t> | ||||
<t>Otherwise, an NSH-aware SF or SFC Proxy that receives encrypted | <t>Otherwise, an NSH-aware SF or SFC Proxy that receives encrypted | |||
Context Headers, for which it is not allowed to consume a specific | Context Headers, for which it is not allowed to consume a specific | |||
Context Header it decrypts (but consumes others), MUST keep that | Context Header it decrypts (but consumes others), <bcp14>MUST</bcp14> ke ep that | |||
Context Header unaltered when forwarding the packet upstream.</t> | Context Header unaltered when forwarding the packet upstream.</t> | |||
<t>Only one instance of a "MAC and Encrypted Metadata" Context Header | ||||
<t>Only one instance of "MAC and Encrypted Metadata" Context Header | (<xref target="new" format="default"/>) is allowed in an NSH level. If m | |||
(<xref target="new"></xref>) is allowed in an NSH level. If multiple | ultiple | |||
instances of "MAC and Encrypted Metadata" Context Header are included | instances of a "MAC and Encrypted Metadata" Context Header are included | |||
in an NSH level, the SFC data plane element MUST process the first | in an NSH level, the SFC data plane element <bcp14>MUST</bcp14> process | |||
instance and ignore subsequent instances, and MAY log or increase a | the first | |||
counter for this event as per Section 2.5.1 of <xref | instance and ignore subsequent instances and <bcp14>MAY</bcp14> log or i | |||
target="RFC8300"></xref>. If NSH-in-NSH is used (<xref | ncrease a | |||
target="nsh-in-nsh"></xref>), distinct LoAs may be used for each NSH | counter for this event as per <xref target="RFC8300" section="2.5.1" sec | |||
tionFormat="of"/>. If NSH within NSH is used (<xref target="nsh-in-nsh" format=" | ||||
default"/>), distinct LoAs may be used for each NSH | ||||
level.</t> | level.</t> | |||
<t>MTU and fragmentation considerations are discussed in <xref target="M | ||||
<t>MTU and fragmentation considerations are discussed in <xref | TU" format="default"/>.</t> | |||
target="MTU"></xref>.</t> | ||||
</section> | </section> | |||
<section title="MAC NSH Data Generation"> | <section numbered="true" toc="default"> | |||
<t>After performing any Context Header encryption, the HMAC algorithm | ||||
discussed in <xref target="RFC4868"></xref> is used to integrity | ||||
protect the target NSH data. An NSH imposer inserts a "MAC and | ||||
Encrypted Metadata" Context Header for integrity protection (<xref | ||||
target="new"></xref>).</t> | ||||
<name>MAC NSH Data Generation</name> | ||||
<t>After performing any Context Header encryption, the HMAC algorithm | ||||
discussed in <xref target="RFC4868" format="default"/> is used to | ||||
integrity protect the target NSH data. An NSH imposer inserts a "MAC | ||||
and Encrypted Metadata" Context Header for integrity protection (<xref | ||||
target="new" format="default"/>).</t> | ||||
<t>The NSH imposer sets the MAC field to zero and then computes the | <t>The NSH imposer sets the MAC field to zero and then computes the | |||
message integrity for the target NSH data (depending on the integrity | message integrity for the target NSH data (depending on the | |||
protection scope discussed in <xref target="new"></xref>) using | integrity-protection scope discussed in <xref target="new" | |||
MAC_KEY and HMAC algorithm. It inserts the computed digest in the MAC | format="default"/>) using the MAC_KEY and HMAC algorithm. It inserts | |||
field of the "MAC and Encrypted Metadata" Context Header. The length | the computed digest in the MAC field of the "MAC and Encrypted | |||
of the MAC is decided by the HMAC algorithm adopted for the particular | Metadata" Context Header. The length of the MAC is decided by the HMAC | |||
key identifier.</t> | algorithm adopted for the particular key identifier.</t> | |||
<t>The Message Authentication Code (T) computation process for the | <t>The Message Authentication Code (T) computation process for the | |||
target NSH data with HMAC-SHA-256-128() can be illustrated as | target NSH data with HMAC-SHA-256-128() can be illustrated as | |||
follows:</t> | follows:</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ T = HMAC-SHA | ||||
<figure> | -256-128(MAC_KEY, target NSH data) | |||
<artwork><![CDATA[ T = HMAC-SHA-256-128(MAC_KEY, target NSH data) | ||||
]]></artwork> | ]]></artwork> | |||
</figure> | ||||
<t></t> | <t>An entity in the SFP that updates the NSH <bcp14>MUST</bcp14> follow | |||
the above | ||||
<t>An entity in the SFP that updates the NSH MUST follow the above | ||||
behavior to maintain message integrity of the NSH for subsequent | behavior to maintain message integrity of the NSH for subsequent | |||
validations.</t> | validations.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Encrypted NSH Metadata Generation"> | <name>Encrypted NSH Metadata Generation</name> | |||
<t>An NSH imposer can encrypt Context Headers carrying sensitive | <t>An NSH imposer can encrypt Context Headers carrying sensitive | |||
metadata, i.e., encrypted and unencrypted metadata may be carried | metadata, i.e., encrypted and unencrypted metadata may be carried | |||
simultaneously in the same NSH packet (Sections <xref format="counter" | simultaneously in the same NSH packet (Sections <xref format="counter" t | |||
target="scope1"></xref> and <xref format="counter" | arget="scope1"/> and <xref format="counter" target="scope2"/>).</t> | |||
target="scope2"></xref>).</t> | <t>In order to prevent pervasive monitoring <xref target="RFC7258" forma | |||
t="default"/>, it is <bcp14>RECOMMENDED</bcp14> to encrypt all Context | ||||
<t>In order to prevent pervasive monitoring <xref | Headers. All Context Headers carrying privacy-sensitive metadata <bcp14> | |||
target="RFC7258"></xref>, it is RECOMMENDED to encrypt all Context | MUST</bcp14> | |||
Headers. All Context Headers carrying privacy-sensitive metadata MUST | ||||
be encrypted; by doing so, privacy-sensitive metadata is not revealed | be encrypted; by doing so, privacy-sensitive metadata is not revealed | |||
to attackers. Privacy specific threats are discussed in Section 5.2 of | to attackers. Privacy-specific threats are discussed in | |||
<xref target="RFC6973"></xref>.</t> | <xref target="RFC6973" section="5.2" sectionFormat="of"/>.</t> | |||
<t>Using the secret key (ENC_KEY) and authenticated encryption | <t>Using the secret key (ENC_KEY) and authenticated encryption | |||
algorithm, the NSH imposer encrypts the Context Headers (as set, for | algorithm, the NSH imposer encrypts the Context Headers (as set, for | |||
example, in <xref target="req"></xref>) and inserts the resulting | example, in <xref target="req" format="default"/>) and inserts the | |||
payload in the "MAC and Encrypted Metadata" Context Header (<xref | resulting payload in the "MAC and Encrypted Metadata" Context Header | |||
target="new"></xref>). The additional authenticated data input to the | (<xref target="new" format="default"/>). The additional authenticated | |||
AEAD function is a zero-length byte string. The entire Context Header | data input to the AEAD function is a zero-length byte string. The | |||
carrying a sensitive metadata is encrypted (that is, including the MD | entire Context Header carrying sensitive metadata is encrypted (that | |||
Class, Type, Length, and associated metadata of each Context | is, including the MD Class, Type, Length, and associated metadata of | |||
Header).</t> | each Context Header).</t> | |||
<t>More details about the exact encryption procedure are provided in | <t>More details about the exact encryption procedure are provided in | |||
Section 2.1 of <xref target="RFC5116"></xref>. In this case, the | <xref target="RFC5116" section="2.1" sectionFormat="of"/>. In this | |||
associated data (A) input is zero-length for AES-GCM.</t> | case, the associated data (A) input is zero length for AES | |||
Galois/Counter Mode (AES-GCM).</t> | ||||
<t>An authorized entity in the SFP that updates the content of an | <t>An authorized entity in the SFP that updates the content of an | |||
encrypted Context Header or needs to add a new encrypted Context | encrypted Context Header or needs to add a new encrypted Context | |||
Header MUST also follow the aforementioned behavior.</t> | Header <bcp14>MUST</bcp14> also follow the aforementioned behavior.</t> | |||
</section> | </section> | |||
<section anchor="time" numbered="true" toc="default"> | ||||
<section anchor="time" title="Timestamp for Replay Attack Prevention"> | <name>Timestamp for Replay Attack Prevention</name> | |||
<t>The Timestamp imposed by an initial Classifier is left untouched | <t>The Timestamp imposed by an initial Classifier is left untouched | |||
along an SFP. However, it can be updated when reclassification occurs | along an SFP. However, it can be updated when reclassification occurs | |||
(Section 4.8 of <xref target="RFC7665"></xref>). The same | (<xref target="RFC7665" section="4.8" sectionFormat="of"/>). The same | |||
considerations for setting the Timestamp are followed in both initial | considerations for setting the Timestamp are followed in both initial | |||
classification and reclassification (<xref | classification and reclassification (<xref target="timef" format="defaul | |||
target="timef"></xref>).</t> | t"/>).</t> | |||
<t>The received NSH is accepted by an NSH-aware node if the Timestamp | <t>The received NSH is accepted by an NSH-aware node if the Timestamp | |||
(TS) in the NSH is recent enough to the reception time of the NSH | (TS) in the NSH is recent enough to the reception time of the NSH | |||
(TSrt). The following formula is used for this check:</t> | (TSrt). The following formula is used for this check:</t> | |||
<artwork name="" type="" align="left" alt=""><![CDATA[ -Delta < (TS | ||||
<t><figure> | rt - TS) < +Delta | |||
<artwork><![CDATA[ -Delta < (TSrt - TS) < +Delta | ||||
]]></artwork> | ]]></artwork> | |||
</figure></t> | ||||
<t>The Delta interval is a configurable parameter. The default value | <t>The Delta interval is a configurable parameter. The default value | |||
for the allowed Delta is 2 seconds. Special care should be taken when | for the allowed Delta is 2 seconds. Special care should be taken when | |||
setting very low Delta values as this may lead to dropping legitimate | setting very low Delta values as this may lead to dropping legitimate | |||
traffic. If the timestamp is not within the boundaries, then the SFC | traffic. If the timestamp is not within the boundaries, then the SFC | |||
data plane element receiving such packet MUST discard the NSH | data plane element receiving such packets <bcp14>MUST</bcp14> discard th e NSH | |||
message.</t> | message.</t> | |||
<t>Replay attacks within the Delta window may be detected by an | <t>Replay attacks within the Delta window may be detected by an | |||
NSH-aware node by recording a unique value derived from the packet, | NSH-aware node by recording a unique value derived from the packet, | |||
for example, a unique value from the MAC field value. Such an | such as a unique value from the MAC field value. Such an NSH-aware | |||
NSH-aware node will detect and reject duplicates. If for legitimate | node will detect and reject duplicates. If for legitimate service | |||
service reasons, some flows have to be duplicated but still share | reasons some flows have to be duplicated but still share a portion of | |||
portion of an SFP with the original flow, legitimate duplicate packets | an SFP with the original flow, legitimate duplicate packets will be | |||
will be tagged by NSH-aware nodes involved in that segment as replay | tagged by NSH-aware nodes involved in that segment as replay packets | |||
packets unless sufficient entropy is added to the duplicate packet. | unless sufficient entropy is added to the duplicate packet. How such | |||
How such an entropy is added is implementation-specific.</t> | an entropy is added is implementation specific.</t> | |||
<t><list style="empty"> | <t indent="3"> | |||
<t>Note: Within the timestamp delta window, defining a sequence | Note: Within the timestamp Delta window, defining a sequence number to protect | |||
number to protect against replay attacks may be considered. In | against replay attacks may be considered. In such a mode, NSH-aware nodes must | |||
such mode, NSH-aware nodes must discard packets with duplicate | discard packets with duplicate sequence numbers within the timestamp Delta | |||
sequence numbers within the timestamp delta window. However, in | window. However, in deployments with several instances of the same SF (e.g., | |||
deployments with several instances of the same SF (e.g., cluster | cluster or load-balanced SFs), a mechanism to coordinate among those instances | |||
or load-balanced SFs), a mechanism to coordinate among those | to discard duplicate sequence numbers is required. Because the coordination | |||
instances to discard duplicate sequence numbers is required. | mechanism to comply with this requirement is service specific, this document | |||
Because the coordination mechanism to comply with this requirement | does not include this protection. | |||
is service-specific, this document does not include this | ||||
protection.</t> | </t> | |||
</list></t> | ||||
<t>All SFC data plane elements must be synchronized among themselves. | <t>All SFC data plane elements must be synchronized among themselves. | |||
These elements may be synchronized to a global reference time.</t> | These elements may be synchronized to a global reference time.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="NSH Data Validation"> | <name>NSH Data Validation</name> | |||
<t>When an SFC data plane element that conforms to this specification | <t>When an SFC data plane element that conforms to this specification | |||
needs to check the validity of the NSH data, it MUST ensure that a | needs to check the validity of the NSH data, it <bcp14>MUST</bcp14> ensu re that a | |||
"MAC and Encrypted Metadata" Context Header is included in a received | "MAC and Encrypted Metadata" Context Header is included in a received | |||
NSH packet. The imposer MUST silently discard the packet and MUST log | NSH packet. The imposer <bcp14>MUST</bcp14> silently discard the packet and <bcp14>MUST</bcp14> log | |||
an error at least once per the SPI if at least one of the following is | an error at least once per the SPI if at least one of the following is | |||
observed:<list style="symbols"> | observed:</t> | |||
<t>the "MAC and Encrypted Metadata" Context Header is missing,</t> | <ul spacing="normal"> | |||
<li>the "MAC and Encrypted Metadata" Context Header is missing,</li> | ||||
<t>the enclosed key identifier is unknown or invalid (e.g., the | <li>the enclosed key identifier is unknown or invalid (e.g., the | |||
corresponding key expired),</t> | corresponding key expired), or</li> | |||
<li>the timestamp is invalid (<xref target="time" format="default"/>). | ||||
<t>the timestamp is invalid (<xref target="time"></xref>).</t> | </li> | |||
</list></t> | </ul> | |||
<t>If the timestamp check is successfully passed, the SFC data plane | <t>If the timestamp check is successfully passed, the SFC data plane | |||
element proceeds with NSH data integrity validation. After storing the | element proceeds with NSH data integrity validation. After storing the | |||
value of the MAC field in the "MAC and Encrypted Metadata" Context | value of the MAC field in the "MAC and Encrypted Metadata" Context | |||
Header, the SFC data plane element fills the MAC field with zeros. | Header, the SFC data plane element fills the MAC field with zeros. | |||
Then, the SFC data plane element generates the message integrity for | Then, the SFC data plane element generates the message integrity for | |||
the target NSH data (depending on the integrity protection scope | the target NSH data (depending on the integrity-protection scope | |||
discussed in <xref target="new"></xref>) using MAC_KEY and HMAC | discussed in <xref target="new" format="default"/>) using the MAC_KEY an | |||
algorithm. If the value of the newly generated digest is identical to | d | |||
the stored one, the SFC data plane element is certain that the NSH | HMAC algorithm. If the value of the newly generated digest is | |||
data has not been tampered and validation is therefore successful. | identical to the stored one, the SFC data plane element is certain | |||
Otherwise, the NSH packet MUST be discarded. The comparison of the | that the NSH data has not been tampered with and validation is | |||
computed HMAC value to the stored value MUST be done in a | therefore successful. Otherwise, the NSH packet <bcp14>MUST</bcp14> | |||
constant-time manner to thwart timing attacks.</t> | be discarded. The comparison of the computed HMAC value to the stored | |||
value <bcp14>MUST</bcp14> be done in a constant-time manner to thwart | ||||
timing attacks.</t> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Decryption of NSH Metadata"> | <name>Decryption of NSH Metadata</name> | |||
<t>If entitled to consume a supplied encrypted Context Header, an | <t>If entitled to consume a supplied encrypted Context Header, an | |||
NSH-aware SF or SFC Proxy decrypts metadata using (K) and decryption | NSH-aware SF or SFC Proxy decrypts metadata using (K) and a decryption | |||
algorithm for the key identifier in the NSH.</t> | algorithm for the key identifier in the NSH.</t> | |||
<t>The authenticated encryption algorithm has only a single output, eith | ||||
<t>Authenticated encryption algorithm has only a single output, either | er | |||
a plaintext or a special symbol (FAIL) that indicates that the inputs | a plaintext or a special symbol (FAIL) that indicates that the inputs | |||
are not authentic (Section 2.2 of [RFC5116]).</t> | are not authentic (<xref target="RFC5116" section="2.2" sectionFormat="o f"/>).</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="MTU" numbered="true" toc="default"> | ||||
<section anchor="MTU" title="MTU Considerations"> | <name>MTU Considerations</name> | |||
<t>The SFC architecture prescribes that additional information be added | <t>The SFC architecture prescribes that additional information be added | |||
to packets to: <list style="symbols"> | to packets to: </t> | |||
<t>Identify SFPs: this is typically the NSH Base Header and Service | ||||
Path Header.</t> | ||||
<t>Carry metadata such as those defined in <xref format="default" | ||||
target="new"></xref>.</t> | ||||
<t>Steer the traffic along the SFPs: transport encapsulation.</t> | ||||
</list></t> | ||||
<ul spacing="normal"> | ||||
<li>Identify SFPs: this is typically the NSH Base Header and Service | ||||
Path Header.</li> | ||||
<li>Carry metadata such as that defined in <xref format="default" target | ||||
="new"/>.</li> | ||||
<li>Steer the traffic along the SFPs: This is realized by means of | ||||
transport encapsulation.</li> | ||||
</ul> | ||||
<t>This added information increases the size of the packet to be carried | <t>This added information increases the size of the packet to be carried | |||
along an SFP.</t> | along an SFP.</t> | |||
<t>Aligned with <xref target="RFC8300" section="5" sectionFormat="of"/>, i | ||||
<t>Aligned with Section 5 of <xref target="RFC8300"></xref>, it is | t is | |||
RECOMMENDED for network operators to increase the underlying MTU so that | <bcp14>RECOMMENDED</bcp14> that network operators increase the underlying | |||
MTU so that | ||||
NSH traffic is forwarded within an SFC-enabled domain without | NSH traffic is forwarded within an SFC-enabled domain without | |||
fragmentation. The available underlying MTU should be taken into account | fragmentation. The available underlying MTU should be taken into account | |||
by network operators when providing SFs with the required Context | by network operators when providing SFs with the required Context | |||
Headers to be injected per SFP and the size of the data to be carried in | Headers to be injected per SFP and the size of the data to be carried in | |||
these Context Headers.</t> | these Context Headers.</t> | |||
<t>If the underlying MTU cannot be increased to accommodate the NSH | <t>If the underlying MTU cannot be increased to accommodate the NSH | |||
overhead, network operators may rely upon a transport encapsulation | overhead, network operators may rely upon a transport encapsulation | |||
protocol with the required fragmentation handling. The impact of | protocol with the required fragmentation handling. The impact of | |||
activating such feature on SFFs should be carefully assessed by network | activating such features on SFFs should be carefully assessed by network | |||
operators (Section 5.6 of <xref target="RFC7665"></xref>).</t> | operators (<xref target="RFC7665" section="5.6" sectionFormat="of"/>).</t> | |||
<t>When dealing with MTU issues, network operators should consider the | <t>When dealing with MTU issues, network operators should consider the | |||
limitations of various tunnel mechanisms such as those discussed in | limitations of various tunnel mechanisms such as those discussed in | |||
<xref target="I-D.ietf-intarea-tunnels"></xref>.</t> | <xref target="I-D.ietf-intarea-tunnels" format="default"/>.</t> | |||
</section> | </section> | |||
<section anchor="Security" numbered="true" toc="default"> | ||||
<section anchor="Security" title="Security Considerations"> | <name>Security Considerations</name> | |||
<t>Data plane SFC-related security considerations, including privacy, | <t>Data plane SFC-related security considerations, including privacy, | |||
are discussed in Section 6 of <xref target="RFC7665"></xref> and Section | are discussed in <xref target="RFC7665" section="6" sectionFormat="of"/> | |||
8 of <xref target="RFC8300"></xref>. In particular, Section 8.2.2 of | and <xref target="RFC8300" section="8" sectionFormat="of"/>. In | |||
<xref target="RFC8300"></xref> states that attached metadata (i.e., | particular, <xref target="RFC8300" section="8.2.2" sectionFormat="of"/> | |||
Context Headers) should be limited to that necessary for correct | states that attached metadata (i.e., Context Headers) should be limited | |||
operation of the SFP. Also, that section indicates that <xref | to that which is necessary for correct operation of the SFP. Also, that se | |||
target="RFC8165"></xref> discusses metadata considerations that | ction | |||
operators can take into account when using NSH.</t> | indicates that <xref target="RFC8165" format="default"/> discusses | |||
metadata considerations that operators can take into account when using | ||||
NSH.</t> | ||||
<t>The guidelines for cryptographic key management are discussed in | <t>The guidelines for cryptographic key management are discussed in | |||
<xref target="RFC4107"></xref>. The group key management protocol | <xref target="RFC4107" format="default"/>. The group key management | |||
related security considerations discussed in Section 8 of <xref | protocol-related security considerations discussed in <xref | |||
target="RFC4046"></xref> needs to be taken into consideration.</t> | target="RFC4046" section="8" sectionFormat="of"/> need to be taken into | |||
consideration.</t> | ||||
<t>The interaction between the SFC data plane elements and a key | <t>The interaction between the SFC data plane elements and a key | |||
management system MUST NOT be transmitted in clear since this would | management system <bcp14>MUST NOT</bcp14> be transmitted unencrypted since | |||
completely destroy the security benefits of the integrity protection | this would completely destroy the security benefits of the | |||
solution defined in this document.</t> | integrity-protection solution defined in this document.</t> | |||
<t>The secret key (K) must have an expiration time assigned as the | <t>The secret key (K) must have an expiration time assigned as the | |||
latest point in time before which the key may be used for integrity | latest point in time before which the key may be used for integrity | |||
protection of NSH data and encryption of Context Headers. Prior to the | protection of NSH data and encryption of Context Headers. Prior to the | |||
expiration of the secret key, all participating NSH-aware nodes SHOULD | expiration of the secret key, all participating NSH-aware nodes <bcp14>SHO ULD</bcp14> | |||
have the control plane distribute a new key identifier and associated | have the control plane distribute a new key identifier and associated | |||
keying material so that when the secret key is expired, those nodes are | keying material so that when the secret key is expired, those nodes are | |||
prepared with the new secret key. This allows the NSH imposer to switch | prepared with the new secret key. This allows the NSH imposer to switch | |||
to the new key identifier as soon as necessary. It is RECOMMENDED that | to the new key identifier as soon as necessary. It is <bcp14>RECOMMENDED</ bcp14> that | |||
the next key identifier and associated keying material be distributed by | the next key identifier and associated keying material be distributed by | |||
the control plane well prior to the secret key expiration time. | the control plane well prior to the secret key expiration time. | |||
Additional guidance for users of AEAD functions about rekeying can be | Additional guidance for users of AEAD functions about rekeying can be | |||
found in <xref target="I-D.irtf-cfrg-aead-limits"></xref>.</t> | found in <xref target="I-D.irtf-cfrg-aead-limits" format="default"/>.</t> | |||
<t>The security and integrity of the key-distribution mechanism is vital | <t>The security and integrity of the key-distribution mechanism is vital | |||
to the security of the SFC system as a whole.</t> | to the security of the SFC system as a whole.</t> | |||
<t>NSH data is exposed to several threats:</t> | ||||
<t>NSH data are exposed to several threats:</t> | <ul spacing="normal"> | |||
<li>An on-path attacker modifying the NSH data.</li> | ||||
<t><list style="symbols"> | <li>An attacker spoofing the NSH data.</li> | |||
<t>A on-path attacker modifying the NSH data.</t> | <li>An attacker capturing and replaying the NSH data.</li> | |||
<li>Data carried in Context Headers revealing privacy-sensitive | ||||
<t>Attacker spoofing the NSH data.</t> | information to attackers.</li> | |||
<li>An attacker replacing the packet on which the NSH is imposed with a | ||||
<t>Attacker capturing and replaying the NSH data.</t> | modified or bogus packet.</li> | |||
</ul> | ||||
<t>Data carried in Context Headers revealing privacy-sensitive | ||||
information to attackers.</t> | ||||
<t>Attacker replacing the packet on which the NSH is imposed with a | ||||
modified or bogus packet.</t> | ||||
</list></t> | ||||
<t>In an SFC-enabled domain where the above attacks are possible, (1) | <t>In an SFC-enabled domain where the above attacks are possible, (1) | |||
NSH data MUST be integrity-protected and replay-protected, and (2) | NSH data <bcp14>MUST</bcp14> be integrity protected and | |||
privacy-sensitive NSH metadata MUST be encrypted for confidentiality | replay protected, and (2) privacy-sensitive NSH metadata | |||
preservation purposes. The Base and Service Path headers are not | <bcp14>MUST</bcp14> be encrypted for confidentiality preservation | |||
encrypted.</t> | purposes. The Base and Service Path Headers are not encrypted.</t> | |||
<t>MACs with two levels of assurance are defined in <xref target="new" | ||||
<t>MACs with two levels of assurance are defined in <xref | format="default"/>. Considerations specific to each level of assurance | |||
target="new"></xref>. Considerations specific to each level of assurance | are discussed in Sections <xref format="counter" target="mac1"/> and | |||
are discussed in Sections <xref format="counter" target="mac1"></xref> | <xref format="counter" target="mac2"/>.</t> | |||
and <xref format="counter" target="mac2"></xref>.</t> | ||||
<t>The attacks discussed in <xref | <t>The attacks discussed in <xref | |||
target="I-D.nguyen-sfc-security-architecture"></xref> are handled owing | target="I-D.nguyen-sfc-security-architecture" format="default"/> are | |||
to the solution specified in this document, except for attacks dropping | handled based on the solution specified in this document, with the | |||
packets. Such attacks can be detected relying upon statistical analysis; | exception of attacks dropping packets. Such attacks can be detected | |||
such analysis is out of the scope of this document. Also, if SFFs are | by relying upon statistical analysis; such analysis is out of the scope of | |||
not involved in the integrity checks, a misbehaving SFF which decrements | this document. Also, if SFFs are not involved in the integrity checks, a | |||
SI while this should be done by an SF (SF bypass attack) will be | misbehaving SFF that decrements SI while this should be done by an SF | |||
detected by an upstream SF because the integrity check will fail.</t> | (SF bypass attack) will be detected by an upstream SF because the | |||
integrity check will fail.</t> | ||||
<t>Some events are logged locally with notification alerts sent by | <t>Some events are logged locally with notification alerts sent by | |||
NSH-aware nodes to a Control Element. These events SHOULD be | NSH-aware nodes to a Control Element. These events <bcp14>SHOULD</bcp14> b | |||
rate-limited.</t> | e | |||
rate limited.</t> | ||||
<t>The solution specified in this document does not provide data origin | <t>The solution specified in this document does not provide data origin | |||
authentication.</t> | authentication.</t> | |||
<t>In order to detect compromised nodes, it is assumed that appropriate | <t>In order to detect compromised nodes, it is assumed that appropriate | |||
mechanisms to monitor and audit an SFC-enabled domain to detect | mechanisms to monitor and audit an SFC-enabled domain to detect | |||
misbehavior and to deter misuse are in place. Compromised nodes can thus | misbehavior and to deter misuse are in place. Compromised nodes can thus | |||
be withdrawn from active service function chains using appropriate | be withdrawn from active service function chains using appropriate | |||
control plane mechanisms.</t> | control plane mechanisms.</t> | |||
<section anchor="mac1" numbered="true" toc="default"> | ||||
<section anchor="mac1" title="MAC#1"> | <name>MAC#1</name> | |||
<t>An active attacker can potentially modify the Base header (e.g., | <t>An active attacker can potentially modify the Base Header (e.g., | |||
decrement the TTL so the next SFF in the SFP discards the NSH packet). | decrement the TTL so the next SFF in the SFP discards the NSH packet). | |||
An active attacker can typically also drop NSH packets. As such, this | An active attacker can typically also drop NSH packets. As such, this | |||
attack is not considered an attack against the security mechanism | attack is not considered an attack against the security mechanism | |||
specified in the document.</t> | specified in the document.</t> | |||
<t>It is expected that specific devices in the SFC-enabled domain will | <t>It is expected that specific devices in the SFC-enabled domain will | |||
be configured such that no device other than the classifiers (when | be configured such that no device other than the Classifiers (when | |||
reclassification is enabled), NSH-aware SFs, and SFC proxies will be | reclassification is enabled), NSH-aware SFs, and SFC proxies will be | |||
able to update the integrity protected NSH data (<xref | able to update the integrity-protected NSH data (<xref target="gen" | |||
target="gen"></xref>), and also such that no device other than the | format="default"/>), and no device other than the | |||
NSH-aware SFs and SFC proxies will be able to decrypt and update the | NSH-aware SFs and SFC proxies will be able to decrypt and update the | |||
Context Headers carrying sensitive metadata (<xref | Context Headers carrying sensitive metadata (<xref target="gen" | |||
target="gen"></xref>). In other words, if the NSH-aware SFs and SFC | format="default"/>). In other words, it is expected that the NSH-aware | |||
proxies in the SFC-enabled domain are considered fully trusted to act | SFs and SFC proxies in the SFC-enabled domain are considered fully | |||
on the NSH data. Only these elements can have access to sensitive NSH | trusted to act on the NSH data. Only these elements can have access to | |||
metadata and the keying material used to integrity protect NSH data | sensitive NSH metadata and the keying material used to integrity | |||
and encrypt Context Headers.</t> | protect NSH data and encrypt Context Headers.</t> | |||
</section> | </section> | |||
<section anchor="mac2" numbered="true" toc="default"> | ||||
<section anchor="mac2" title="MAC#2"> | <name>MAC#2</name> | |||
<t>SFFs can detect whether an illegitimate node has altered the | <t>SFFs can detect whether an illegitimate node has altered the | |||
content of the Base header. Such messages must be discarded with | content of the Base Header. Such messages must be discarded with | |||
appropriate logs and alarms generated (see <xref | appropriate logs and alarms generated (see <xref target="gen" format="de | |||
target="gen"></xref>).</t> | fault"/>).</t> | |||
<t>Similar to <xref target="mac1" format="default"/>, no device other th | ||||
<t>Similar to <xref target="mac1"></xref>, no device other than the | an the | |||
NSH-aware SFs and SFC proxies in the SFC-enabled domain should be able | NSH-aware SFs and SFC proxies in the SFC-enabled domain should be able | |||
to decrypt and update the Context Headers carrying sensitive | to decrypt and update the Context Headers carrying sensitive | |||
metadata.</t> | metadata.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Time Synchronization"> | <name>Time Synchronization</name> | |||
<t><xref target="RFC8633"></xref> describes best current practices to | <t><xref target="RFC8633" format="default"/> describes best current prac | |||
tices to | ||||
be considered in deployments where SFC data plane elements use NTP for | be considered in deployments where SFC data plane elements use NTP for | |||
time synchronization purposes.</t> | time-synchronization purposes.</t> | |||
<t>Also, a mechanism to provide cryptographic security for NTP is | <t>Also, a mechanism to provide cryptographic security for NTP is | |||
specified in <xref target="RFC8915"></xref>.</t> | specified in <xref target="RFC8915" format="default"/>.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="IANA" title="IANA Considerations"> | <section anchor="IANA" numbered="true" toc="default"> | |||
<t>This document requests IANA to assign the following types from the | <name>IANA Considerations</name> | |||
"NSH IETF-Assigned Optional Variable-Length Metadata Types" (0x0000 IETF | <t>IANA has added the following types to the "NSH IETF-Assigned Optional | |||
Base NSH MD Class) registry available at: | Variable-Length Metadata Types" registry (0x0000 IETF Base NSH MD Class) | |||
https://www.iana.org/assignments/nsh/nsh.xhtml#optional-variable-length-me | at <eref brackets="angle" | |||
tadata-types.</t> | target="https://www.iana.org/assignments/nsh"/>. | |||
</t> | ||||
<t><figure> | <table> | |||
<artwork align="center"><![CDATA[+-------+---------------------------- | <name>Additions to the NSH IETF-Assigned Optional Variable-Length Metadat | |||
---+----------------+ | a Types Registry</name> | |||
| Value | Description | Reference | | <thead> | |||
+=======+===============================+================+ | <tr> | |||
| TBD1 | MAC and Encrypted Metadata #1 | [ThisDocument] | | <th>Value</th> | |||
| TBD2 | MAC and Encrypted Metadata #2 | [ThisDocument] | | <th>Description</th> | |||
+-------+-------------------------------+----------------+]]></artwork> | <th>Reference</th> | |||
</figure></t> | </tr> | |||
</section> | </thead> | |||
<tbody> | ||||
<section title="Acknowledgements"> | <tr> | |||
<t>This document was edited as a follow-up to the discussion in | <td>0x02</td> | |||
IETF#104: | <td>MAC and Encrypted Metadata #1</td> | |||
https://datatracker.ietf.org/meeting/104/materials/slides-104-sfc-sfc-chai | <td>RFC 9145</td> | |||
r-slides-01 | </tr> | |||
(slide 7).</t> | <tr> | |||
<td>0x03</td> | ||||
<t>Thanks to Joel Halpern, Christian Jacquenet, Dirk von Hugo, Tal | <td>MAC and Encrypted Metadata #2</td> | |||
Mizrahi, Daniel Migault, Diego Lopez, Greg Mirsky, and Dhruv Dhody for | <td>RFC 9145</td> | |||
the comments.</t> | </tr> | |||
</tbody> | ||||
<t>Many thanks to Steve Hanna for the valuable secdir review and | </table> | |||
Jürgen Schönwälder for the opsdir review.</t> | ||||
<t>Thanks to Greg Mirsky for the Shepherd review.</t> | ||||
<t>Thanks to Alvaro Retana, Lars Eggert, Martin Duke, Erik Kline, | ||||
Zaheduzzaman Sarker, Éric Vyncke, Roman Danyliw, Murray | ||||
Kucherawy, John Scudder, and Benjamin Kaduk for the IESG review.</t> | ||||
</section> | </section> | |||
</middle> | </middle> | |||
<!-- *****BACK MATTER ***** --> | ||||
<back> | <back> | |||
<references title="Normative References"> | ||||
<?rfc include="reference.RFC.8300"?> | ||||
<?rfc include='reference.RFC.7665'?> | ||||
<?rfc include='reference.RFC.2119'?> | ||||
<?rfc include='reference.RFC.8174'?> | <displayreference target="I-D.ietf-intarea-tunnels" to="INTERNET-IP-TUNNELS" | |||
/> | ||||
<?rfc include='reference.RFC.4868'?> | <displayreference target="I-D.arkko-farrell-arch-model-t" to="INTERNET-THREA | |||
T-MODEL"/> | ||||
<?rfc include='reference.RFC.5116'?> | <displayreference target="I-D.nguyen-sfc-security-architecture" to="ARCH-SFC | |||
-THREATS"/> | ||||
<?rfc include='reference.RFC.4107'?> | <displayreference target="I-D.irtf-cfrg-aead-limits" to="AEAD-LIMITS"/> | |||
<?rfc include='reference.RFC.2104'?> | <references> | |||
<name>References</name> | ||||
<references> | ||||
<name>Normative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8300.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7665.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.2119.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8174.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4868.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5116.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4107.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.2104.xml"/> | ||||
<reference anchor="GCM"> | <reference anchor="GCM"> | |||
<front> | <front> | |||
<title>Recommendation for Block Cipher Modes of Operation: | <title>Recommendation for Block Cipher Modes of Operation: | |||
Galois/Counter Mode (GCM) and GMAC</title> | Galois/Counter Mode (GCM) and GMAC</title> | |||
<author initials="M." surname="Dworkin"> | ||||
<organization/> | ||||
</author> | ||||
<date month="November" year="2007"/> | ||||
</front> | ||||
<seriesInfo name="NIST" value="Special Publication 800-38D"/> | ||||
<seriesInfo name="DOI" value="10.6028/NIST.SP.800-38D"/> | ||||
</reference> | ||||
<author initials="M." surname="Dworkin"> | </references> | |||
<organization></organization> | <references> | |||
</author> | <name>Informative References</name> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
<date month="November" year="2007" /> | FC.8459.xml"/> | |||
</front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
FC.8877.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7498.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.5905.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7258.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6973.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8165.xml"/> | ||||
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-ietf-in | ||||
tarea-tunnels.xml"/> | ||||
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-arkko-f | ||||
arrell-arch-model-t.xml"/> | ||||
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-nguyen- | ||||
sfc-security-architecture.xml"/> | ||||
<xi:include href="https://datatracker.ietf.org/doc/bibxml3/draft-irtf-cf | ||||
rg-aead-limits.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.7635.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8915.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8633.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4046.xml"/> | ||||
<seriesInfo name="NIST" value="Special Publication 800-38D" /> | </references> | |||
</reference> | ||||
</references> | </references> | |||
<references title="Informative References"> | <section numbered="false" toc="default"> | |||
<?rfc include="reference.RFC.8459"?> | <name>Acknowledgements</name> | |||
<t>This document was created as a follow-up to the discussion in | ||||
<?rfc include='reference.RFC.8877'?> | IETF 104: | |||
<eref brackets="angle" target="https://datatracker.ietf.org/meeting/104/ma | ||||
<?rfc include='reference.RFC.7498'?> | terials/slides-104-sfc-sfc-chair-slides-01"/> | |||
(slide 7).</t> | ||||
<?rfc include='reference.RFC.5905'?> | ||||
<?rfc include="reference.RFC.7258"?> | ||||
<?rfc include="reference.RFC.6973"?> | ||||
<?rfc include='reference.RFC.8165'?> | ||||
<?rfc include='reference.I-D.ietf-intarea-tunnels'?> | ||||
<?rfc include='reference.I-D.arkko-farrell-arch-model-t'?> | ||||
<?rfc include='reference.I-D.nguyen-sfc-security-architecture'?> | ||||
<?rfc include='reference.I-D.irtf-cfrg-aead-limits'?> | ||||
<?rfc include='reference.RFC.7635'?> | ||||
<?rfc include='reference.RFC.8915'?> | ||||
<?rfc include='reference.RFC.8633'?> | ||||
<?rfc include='reference.RFC.4046'?> | <t>Thanks to <contact fullname="Joel Halpern"/>, <contact | |||
fullname="Christian Jacquenet"/>, <contact fullname="Dirk von Hugo"/>, | ||||
<contact fullname="Tal Mizrahi"/>, <contact fullname="Daniel Migault"/>, | ||||
<contact fullname="Diego Lopez"/>, <contact fullname="Greg Mirsky"/>, | ||||
and <contact fullname="Dhruv Dhody"/> for the comments.</t> | ||||
<t>Many thanks to <contact fullname="Steve Hanna"/> for the valuable secdi | ||||
r review and | ||||
<contact fullname="Juergen Schoenwaelder"/> for the opsdir review.</t> | ||||
<t>Thanks to <contact fullname="Greg Mirsky"/> for the <contact | ||||
fullname="Shepherd review"/>.</t> | ||||
<t>Thanks to <contact fullname="Alvaro Retana"/>, <contact | ||||
fullname="Lars Eggert"/>, <contact fullname="Martin Duke"/>, <contact | ||||
fullname="Erik Kline"/>, <contact fullname="Zaheduzzaman Sarker"/>, | ||||
<contact fullname="Éric Vyncke"/>, <contact fullname="Roman Danyliw"/>, | ||||
<contact fullname="Murray Kucherawy"/>, <contact fullname="John | ||||
Scudder"/>, and <contact fullname="Benjamin Kaduk"/> for the IESG | ||||
review.</t> | ||||
</section> | ||||
<!----> | ||||
</references> | ||||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 234 change blocks. | ||||
901 lines changed or deleted | 941 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |