rfc9172xml2.original.xml | rfc9172.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | ||||
<!ENTITY RFC4838 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | <!DOCTYPE rfc [ | |||
.4838.xml"> | <!ENTITY nbsp " "> | |||
<!ENTITY RFC6257 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | <!ENTITY zwsp "​"> | |||
.6257.xml"> | <!ENTITY nbhy "‑"> | |||
<!ENTITY RFC8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | <!ENTITY wj "⁠"> | |||
.8174.xml"> | ||||
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.3552.xml"> | ||||
<!ENTITY RFC8949 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.8949.xml"> | ||||
<!ENTITY RFC6255 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.6255.xml"> | ||||
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
.2119.xml"> | ||||
]> | ]> | |||
<?rfc toc="yes"?> | ||||
<!-- generate a table of contents --> | ||||
<?rfc symrefs="yes"?> | ||||
<!-- use anchors instead of numbers for references --> | ||||
<?rfc sortrefs="yes" ?> | ||||
<!-- alphabetize the references --> | ||||
<?rfc compact="yes" ?> | ||||
<!-- conserve vertical whitespace --> | ||||
<?rfc subcompact="no" ?> | ||||
<!-- but keep a blank line between list items --> | ||||
<rfc category="std" docName="draft-ietf-dtn-bpsec-27" ipr="trust200902" | ||||
obsoletes="" submissionType="IETF" updates="" xml:lang="en"> | ||||
<front> | ||||
<title>Bundle Protocol Security Specification</title> | ||||
<author fullname="Edward J. Birrane, III" initials="E.J." | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-dtn-bpsec-27 | |||
surname="Birrane"> | " number="9172" ipr="trust200902" obsoletes="" submissionType="IETF" category="s | |||
<organization abbrev="JHU/APL">The Johns Hopkins University Applied | td" | |||
consensus="true" updates="" xml:lang="en" tocInclude="true" symRefs="true" | ||||
sortRefs="true" version="3"> | ||||
<!-- xml2rfc v2v3conversion 3.6.0 --> | ||||
<front> | ||||
<title>Bundle Protocol Security (BPSec)</title> | ||||
<seriesInfo name="RFC" value="9172"/> | ||||
<author fullname="Edward J. Birrane, III" initials="E" surname="Birrane, III | ||||
"> | ||||
<organization abbrev="JHU/APL">The Johns Hopkins University Applied | ||||
Physics Laboratory</organization> | Physics Laboratory</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>11100 Johns Hopkins Rd.</street> | <street>11100 Johns Hopkins Rd.</street> | |||
<city>Laurel</city> | <city>Laurel</city> | |||
<region>MD</region> | <region>MD</region> | |||
<code>20723</code> | <code>20723</code> | |||
<country>US</country> | <country>United States of America</country> | |||
</postal> | </postal> | |||
<phone>+1 443 778 7423</phone> | <phone>+1 443 778 7423</phone> | |||
<email>Edward.Birrane@jhuapl.edu</email> | <email>Edward.Birrane@jhuapl.edu</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Kenneth McKeever" initials="K" surname="McKeever"> | ||||
<author fullname="Kenneth McKeever" initials="K.R." | <organization abbrev="JHU/APL">The Johns Hopkins University Applied | |||
surname="McKeever"> | ||||
<organization abbrev="JHU/APL">The Johns Hopkins University Applied | ||||
Physics Laboratory</organization> | Physics Laboratory</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>11100 Johns Hopkins Rd.</street> | <street>11100 Johns Hopkins Rd.</street> | |||
<city>Laurel</city> | <city>Laurel</city> | |||
<region>MD</region> | <region>MD</region> | |||
<code>20723</code> | <code>20723</code> | |||
<country>US</country> | <country>United States of America</country> | |||
</postal> | </postal> | |||
<phone>+1 443 778 2237</phone> | <phone>+1 443 778 2237</phone> | |||
<email>Ken.McKeever@jhuapl.edu</email> | <email>Ken.McKeever@jhuapl.edu</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date month="January" year="2022"/> | ||||
<date month="February" day="15" year="2021"/> | ||||
<!-- Meta-data --> | ||||
<area>General</area> | <area>General</area> | |||
<workgroup>Delay-Tolerant Networking</workgroup> | ||||
<workgroup>Delay-Tolerant Networking</workgroup> | <keyword>security</keyword> | |||
<keyword>bundle</keyword> | ||||
<keyword>security</keyword> | <keyword>integrity</keyword> | |||
<keyword>bundle</keyword> | <keyword>confidentiality</keyword> | |||
<keyword>integrity</keyword> | <abstract> | |||
<keyword>confidentiality</keyword> | <t> | |||
<abstract> | ||||
<t> | ||||
This document defines a security protocol providing data | This document defines a security protocol providing data | |||
integrity and confidentiality services for the Bundle Protocol. | integrity and confidentiality services for the Bundle Protocol (BP). | |||
</t> | </t> | |||
</abstract> | ||||
</abstract> | </front> | |||
</front> | <middle> | |||
<section anchor="intro" toc="default" numbered="true"> | ||||
<middle> | <name>Introduction</name> | |||
<t> | ||||
<section anchor="intro" title="Introduction" toc="default"> | ||||
<t> | ||||
This document defines security features for the Bundle Protocol | This document defines security features for the Bundle Protocol | |||
(BP) <xref target="I-D.ietf-dtn-bpbis"/> and is intended for use | (BP) <xref target="RFC9171" format="default"/> and is intended for use | |||
in Delay Tolerant Networks (DTNs) to provide security | in Delay-Tolerant Networking (DTN) to provide security | |||
services between a security source and a security acceptor. When the | services between a security source and a security acceptor. When the | |||
security source is the bundle source and when the security acceptor is | security source is the bundle source and the security acceptor is | |||
the bundle destination, the security service provides end-to-end | the bundle destination, the security service provides end-to-end | |||
protection. | protection. | |||
</t> | </t> | |||
<t> | ||||
<t> | The Bundle Protocol specification <xref target="RFC9171" format="default"/ | |||
The Bundle Protocol specification <xref target="I-D.ietf-dtn-bpbis"/> | > | |||
defines DTN as referring to "a networking architecture providing | defines DTN as referring to "a network architecture providing | |||
communications in and/or through highly stressed environments" | communications in and/or through highly stressed environments" | |||
where "BP may be viewed as sitting at the application layer of some | where "BP may be viewed as sitting at the application layer of some | |||
number of constituent networks, forming a store-carry-forward | number of constituent networks, forming a store-carry-forward | |||
overlay network". The term "stressed" environment refers to multiple | overlay network". The phrase "stressed environment" refers to multiple | |||
challenging conditions including intermittent connectivity, large | challenging conditions including intermittent connectivity, large | |||
and/or variable delays, asymmetric data rates, and high bit error | and/or variable delays, asymmetric data rates, and high bit error | |||
rates. | rates. | |||
</t> | </t> | |||
<t> | ||||
<t> | It should be presumed that the BP will be deployed in an untrusted | |||
It should be presumed that the BP will be deployed such that the network c | network, which poses the usual security challenges | |||
annot | related to confidentiality and integrity. However, the stressed nature of the | |||
be trusted, posing the usual security challenges related to | BP | |||
confidentiality and integrity. However, the stressed nature of the BP | ||||
operating environment imposes unique conditions where usual transport | operating environment imposes unique conditions where usual transport | |||
security mechanisms may not be sufficient. For example, the | security mechanisms may not be sufficient. For example, the | |||
store-carry-forward nature of the network may require protecting | store-carry-forward nature of the network may require protecting | |||
data at rest, preventing unauthorized consumption of critical | data at rest, preventing unauthorized consumption of critical | |||
resources such as storage space, and operating without regular | resources such as storage space, and operating without regular | |||
contact with a centralized security oracle (such as a certificate | contact with a centralized security oracle (such as a certificate | |||
authority). | authority). | |||
</t> | </t> | |||
<t> | ||||
An end-to-end security service is needed that operates in all of the | ||||
environments where the BP operates. | ||||
</t> | ||||
<section anchor="sup_sec_svc" title="Supported Security Services"> | ||||
<t> | <t> | |||
An end-to-end security service that operates in all of the | ||||
environments where the BP operates is needed. | ||||
</t> | ||||
<section anchor="sup_sec_svc" numbered="true" toc="default"> | ||||
<name>Supported Security Services</name> | ||||
<t> | ||||
BPSec provides integrity and confidentiality | BPSec provides integrity and confidentiality | |||
services for BP bundles, as defined in this section. | services for BP bundles, as defined in this section. | |||
</t> | </t> | |||
<t> | <t> | |||
Integrity services ensure that changes to target data | Integrity services ensure that changes to target data | |||
within a bundle can be discovered. Data changes | within a bundle can be discovered. Data changes | |||
may be caused by processing errors, environmental conditions, | may be caused by processing errors, environmental conditions, | |||
or intentional manipulation. In the context of BPSec, integrity | or intentional manipulation. In the context of BPSec, integrity | |||
services apply to plain text in the bundle. | services apply to plaintext in the bundle. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
Confidentiality services ensure that target data is unintelligible | Confidentiality services ensure that target data is unintelligible | |||
to nodes in the DTN, except for authorized nodes possessing | to nodes in DTN, except for authorized nodes possessing | |||
special information. This generally means producing cipher text from | special information. Generally, this means producing ciphertext from | |||
plain text and generating authentication information for that | plaintext and generating authentication information for that | |||
cipher text. Confidentiality, in this context, applies | ciphertext. In this context, confidentiality applies | |||
to the contents of target data and does not extend to hiding | to the contents of target data and does not extend to hiding | |||
the fact that confidentiality exists in the bundle. | the fact that confidentiality exists in the bundle. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
NOTE: Hop-by-hop authentication is NOT a supported security service | NOTE: Hop-by-hop authentication is NOT a supported security service | |||
in this specification, for two reasons. | in this specification, for two reasons: | |||
<list style="numbers"> | </t> | |||
<t> | <ol spacing="normal" type="1"><li> | |||
The term "hop-by-hop" is ambiguous in a BP overlay, as nodes | The term "hop-by-hop" is ambiguous in a BP overlay, as nodes | |||
that are adjacent in the overlay may not be adjacent in | that are adjacent in the overlay may not be adjacent in | |||
physical connectivity. This condition is difficult or | physical connectivity. This condition is difficult or | |||
impossible to detect and therefore hop-by-hop authentication is | impossible to detect; therefore, hop-by-hop authentication is | |||
difficult or impossible to enforce. | difficult or impossible to enforce. | |||
</t> | </li> | |||
<t> | <li> | |||
Hop-by-hop authentication cannot be deployed in a network if adja cent | Hop-by-hop authentication cannot be deployed in a network if adja cent | |||
nodes in the network have incompatible security capabilities. | nodes in the network have incompatible security capabilities. | |||
</t> | </li> | |||
</list> | </ol> | |||
</t> | </section> | |||
</section> | <section numbered="true" toc="default"> | |||
<name>Specification Scope</name> | ||||
<section title="Specification Scope"> | <t> | |||
<t> | ||||
This document defines the security services provided by the BPSec. | This document defines the security services provided by the BPSec. | |||
This includes the data specification for representing these | This includes the data specification for representing these | |||
services as BP extension blocks, and the rules for adding, | services as BP extension blocks and the rules for adding, | |||
removing, and processing these blocks at various points during | removing, and processing these blocks at various points during | |||
the bundle's traversal of the DTN. | the bundle's traversal of a delay-tolerant network. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
BPSec addresses only the security of data traveling over the | BPSec addresses only the security of data traveling over the | |||
DTN, not the underlying DTN itself. Furthermore, while the BPSec | DTN, not the underlying DTN itself. Furthermore, while the BPSec | |||
protocol can provide security-at-rest in a store-carry-forward | protocol can provide security-at-rest in a store-carry-forward | |||
network, it does not address threats which share computing resources | network, it does not address threats that share computing resources | |||
with the DTN and/or BPSec software implementations. These threats | with the DTN and/or BPSec software implementations. These threats | |||
may be malicious software or compromised libraries which intend | may be malicious software or compromised libraries that intend | |||
to intercept data or recover cryptographic material. Here, it is | to intercept data or recover cryptographic material. Here, it is | |||
the responsibility of the BPSec implementer to ensure that any | the responsibility of the BPSec implementer to ensure that any | |||
cryptographic material, including shared secret or private keys, | cryptographic material, including shared secrets or private keys, | |||
is protected against access within both memory and storage devices. | is protected against access within both memory and storage devices. | |||
</t> | </t> | |||
<t> | ||||
<t> | Completely trusted networks are extremely uncommon. Among | |||
Completely trusted networks are extremely | untrusted networks, different networking conditions and | |||
uncommon. Amongst untrusted networks, different networking conditions a | operational considerations require security mechanisms of | |||
nd | varying strengths. | |||
operational considerations require varying strengths of security | Mandating a single security context, which is a set of assumptions, | |||
mechanism. Mandating a single security context may result in too much s | algorithms, configurations, and policies used to implement security | |||
ecurity | services, may result in too much security for some networks and too | |||
for some networks and too little security in others. It is expected tha | little security in others. Default security contexts are | |||
t separate | defined in <xref target="RFC9173" format="default"/> to provide basic securit | |||
documents define different security contexts for use in different netwo | y services for | |||
rks. | interoperability testing and for operational use on the terrestrial | |||
A set of default security contexts are defined in (<xref target="I-D.ie | Internet. It is expected that separate documents will define | |||
tf-dtn-bpsec-default-sc"/>) | different security contexts for use in different networks. | |||
and provide basic security services for interoperability | </t> | |||
testing and for operational use on the terrestrial Internet. | <t> | |||
</t> | ||||
<t> | ||||
This specification addresses neither the fitness of | This specification addresses neither the fitness of | |||
externally-defined cryptographic methods nor the security of | externally defined cryptographic methods nor the security of | |||
their implementation. | their implementation. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
This specification does not address the implementation of | This specification does not address the implementation of | |||
security policy and does not provide a security policy for the | security policies and does not provide a security policy for the | |||
BPSec. Similar to cipher suites, security policies are based on | BPSec. Similar to cipher suites, security policies are based on | |||
the nature and capabilities of individual networks and network | the nature and capabilities of individual networks and network | |||
operational concepts. This specification does provide policy | operational concepts. This specification does provide policy considerat | |||
considerations when building a security policy. | ions that | |||
</t> | can be taken into account when building a security policy. | |||
</t> | ||||
<t> | <t> | |||
With the exception of the Bundle Protocol, this specification | With the exception of the Bundle Protocol, this specification | |||
does not address how to combine the BPSec security blocks with | does not address how to combine the BPSec security blocks with | |||
other protocols, other BP extension blocks, or other best | other protocols, other BP extension blocks, or other best | |||
practices to achieve security in any particular network | practices to achieve security in any particular network | |||
implementation. | implementation. | |||
</t> | </t> | |||
</section> | ||||
</section> | <section anchor="reldoc" toc="default" numbered="true"> | |||
<name>Related Documents</name> | ||||
<section anchor="reldoc" title="Related Documents" toc="default"> | <t> | |||
<t> | ||||
This document is best read and understood within the context of | This document is best read and understood within the context of | |||
the following other DTN documents: | the following other DTN documents: | |||
</t> | </t> | |||
<ul> | ||||
<t> | <li>"<xref target="RFC4838" format="title"/>" <xref target="RFC4838" fo | |||
"Delay-Tolerant Networking Architecture" <xref target="RFC4838"/> | rmat="default"/> | |||
defines the architecture for DTNs and identifies certain security | defines the architecture for DTN and identifies certain security | |||
assumptions made by existing Internet protocols that are not valid in | assumptions made by existing Internet protocols that are not valid in | |||
a DTN. | DTN. | |||
</t> | </li> | |||
<li> | ||||
<t> | "<xref target="RFC9171" format="title"/>" <xref target="RFC9171" format | |||
The Bundle Protocol <xref target="I-D.ietf-dtn-bpbis"/> defines | ="default"/> defines | |||
the format and processing of bundles, defines the extension | the format and processing of bundles, the extension | |||
block format used to represent BPSec security blocks, and defines | block format used to represent BPSec security blocks, and | |||
the canonical block structure used by this specification. | the canonical block structure used by this specification. | |||
</t> | </li> | |||
<li> | ||||
<t> | "<xref target="RFC8949" format="title"/>" <xref target="RFC8949" format | |||
The Concise Binary Object Representation (CBOR) format <xref target="RF | ="default"/> | |||
C8949"/> | ||||
defines a data format that allows for small code size, fairly small | defines a data format that allows for small code size, fairly small | |||
message size, and extensibility without version negotiation. The | message size, and extensibility without version negotiation. The | |||
block-specific-data associated with BPSec security blocks are encoded | block-type-specific data associated with BPSec security blocks is encod ed | |||
in this data format. | in this data format. | |||
</t> | </li> | |||
<li> | ||||
<t> | "<xref target="RFC6257" format="title"/>" <xref target="RFC6257" format | |||
The Bundle Security Protocol <xref target="RFC6257"/> and | ="default"/> | |||
Streamlined Bundle Security Protocol | introduces the | |||
<xref target="I-D.birrane-dtn-sbsp"/> documents introduced the | concept of using BP extension blocks for security services | |||
concepts of using BP extension blocks for security services | in DTN. BPSec is a continuation and refinement of this | |||
in a DTN. The BPSec is a continuation and refinement of these | document. | |||
documents. | </li> | |||
</t> | </ul> | |||
</section> | </section> | |||
<section anchor="term" toc="default" numbered="true"> | ||||
<section anchor="term" title="Terminology" toc="default"> | <name>Terminology</name> | |||
<t> | <t> | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14 | |||
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | >REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
"MAY", and "OPTIONAL" in this document are to be interpreted as | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<b | |||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> w | cp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
hen, and only when, they | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document ar | |||
e to be interpreted as | ||||
described in BCP 14 <xref target="RFC2119" format="default"/> <xre | ||||
f target="RFC8174" format="default"/> when, and only when, they | ||||
appear in all capitals, as shown here. | appear in all capitals, as shown here. | |||
</t> | </t> | |||
<t> | ||||
<t> | This section defines terminology that either is unique to the BPSec or | |||
This section defines terminology either unique to the BPSec or | is necessary for understanding the concepts defined in | |||
otherwise necessary for understanding the concepts defined in | ||||
this specification. | this specification. | |||
<list style="symbols"> | </t> | |||
<dl spacing="normal"> | ||||
<t> | <dt>Bundle Destination:</dt><dd>the Bundle Protocol Agent (BPA) | |||
Bundle Destination - the node which receives a bundle and deliver | that receives a bundle and delivers the payload of the bundle | |||
s | to an Application Agent. Also, an endpoint comprising the | |||
the payload of the bundle to an application. Also, the Node ID of | node(s) at which the bundle is to be delivered. The bundle | |||
the Bundle Protocol Agent (BPA) receiving the bundle. The bundle | destination acts as the security acceptor for every security | |||
destination acts as | target in every security block in every bundle it receives. | |||
the security acceptor for every security target in every | </dd> | |||
security block in every bundle it receives. | <dt>Bundle Source:</dt><dd>the BPA that originates a | |||
</t> | bundle. Also, any node ID of the node of which the BPA is a | |||
component. | ||||
<t> | </dd> | |||
Bundle Source - the node which originates a bundle. Also, the | <dt>Cipher Suite:</dt><dd>a set of one or more algorithms | |||
Node ID of the BPA originating the bundle. | providing integrity and/or confidentiality services. Cipher | |||
</t> | suites may define user parameters (e.g., secret keys to | |||
use), but they do not provide values for those parameters. | ||||
<t> | </dd> | |||
Cipher Suite - a set of one or more algorithms providing | <dt>Forwarder:</dt><dd>any BPA that transmits a bundle in | |||
integrity and/or confidentiality services. Cipher suites may defi | DTN. Also, any node ID of the node of which the BPA that | |||
ne | sent the bundle on its most recent hop is a component. | |||
user parameters (e.g. secret keys to use) but do not provide valu | </dd> | |||
es for | <dt>Intermediate Receiver, Waypoint, or Next | |||
those parameters. | Hop:</dt><dd>any BPA that receives a bundle from a | |||
</t> | forwarder that is not the bundle destination. Also, any node | |||
ID of the node of which the BPA is a component. | ||||
<t> | </dd> | |||
Forwarder - any node that transmits a bundle in the DTN. | <dt>Path:</dt><dd>the ordered sequence of nodes through | |||
Also, the Node ID of the BPA that sent | which a bundle passes on its way from source to | |||
the bundle on its most recent hop. | destination. The path is not necessarily known in advance by | |||
</t> | the bundle or any BPAs in DTN. | |||
</dd> | ||||
<t> | <dt>Security Acceptor:</dt><dd>a BPA that processes | |||
Intermediate Receiver, Waypoint, or Next Hop - any node | and dispositions one or more security blocks in a bundle. | |||
that receives a bundle from a Forwarder that is not the | Security acceptors act as the endpoint of a security service | |||
Bundle Destination. Also, the Node ID of the BPA at any such node | represented in a security block. They remove the security | |||
. | blocks they act upon as part of processing and disposition. | |||
</t> | Also, any node ID of the node of which the BPA is a component. | |||
</dd> | ||||
<t> | <dt>Security Block:</dt><dd>a BPSec extension block in a | |||
Path - the ordered sequence of nodes through which a bundle | bundle. | |||
passes on its way from Source to Destination. The path is not | </dd> | |||
necessarily known in advance by the bundle or any BPAs in the | <dt>Security Context:</dt><dd>the set of assumptions, | |||
DTN. | algorithms, configurations, and policies used to implement | |||
</t> | security services. | |||
</dd> | ||||
<t> | <dt>Security Operation:</dt><dd>the application of a given | |||
Security Acceptor - a bundle node that processes and dispositions | security service to a security target, notated as | |||
one or more | OP(security service, security target). For example, | |||
security blocks in a bundle. Security acceptors act as the endpoi | OP(bcb-confidentiality, payload). Every security operation | |||
nt of a security | in a bundle <bcp14>MUST</bcp14> be unique, meaning that a | |||
service represented in a security block. They remove the security | given security service can only be applied to a security | |||
blocks they act | target once in a bundle. A security operation is implemented | |||
upon as part of processing and disposition. Also, the Node ID of | by a security block. | |||
that node. | </dd> | |||
</t> | <dt>Security Service:</dt><dd>a process that gives some | |||
protection to a security target. For example, this | ||||
<t> | specification defines security services for plaintext | |||
Security Block - a BPSec extension block in a bundle. | integrity (bib-integrity) and authenticated plaintext | |||
</t> | confidentiality with additional authenticated data | |||
(bcb-confidentiality). | ||||
<t> | </dd> | |||
Security Context - the set of assumptions, algorithms, | <dt>Security Source:</dt><dd>a BPA that adds a | |||
configurations and policies used to implement security services. | security block to a bundle. Also, any node ID of the node | |||
</t> | of which the BPA is a component. | |||
</dd> | ||||
<t> | <dt>Security Target:</dt><dd>the block within a bundle that | |||
Security Operation - the application of a given security service | receives a security service as part of a security operation. | |||
to a security target, notated as OP(security service, | </dd> | |||
security target). For example, OP(bcb-confidentiality, payload). | <dt>Security Verifier:</dt><dd>a BPA that verifies | |||
Every security operation in a bundle MUST be unique, meaning | the data integrity of one or more security blocks in a bundle. | |||
that a given security service can only be applied to a security | Unlike security acceptors, security verifiers do not act as | |||
target once in a bundle. A security operation is | the endpoint of a security service, and they do not remove | |||
implemented by a security block. | verified security blocks. Also, any node ID of the node of | |||
</t> | which the BPA is a component. | |||
</dd> | ||||
<t> | </dl> | |||
Security Service - a process that gives some | </section> | |||
protection to a security target. For example, this specification | </section> | |||
defines security | <section numbered="true" toc="default"> | |||
services for plain text integrity (bib-integrity), and authentica | <name>Design Decisions</name> | |||
ted | <t> | |||
plain text confidentiality with additional authenticated data (bc | The application of security services in DTN is a complex endeavor | |||
b-confidentiality). | ||||
</t> | ||||
<t> | ||||
Security Source - a bundle node that adds a security block to a | ||||
bundle. Also, the Node ID of that node. | ||||
</t> | ||||
<t> | ||||
Security Target - the block within a bundle that | ||||
receives a security service as part of a security operation. | ||||
</t> | ||||
<t> | ||||
Security Verifier - a bundle node that verifies the correctness o | ||||
f | ||||
one or more security blocks in a bundle. Unlike security acceptor | ||||
s, | ||||
security verifiers do not act as the endpoint of a security servi | ||||
ce and do | ||||
not remove verified security blocks. Also, the Node ID of that no | ||||
de. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
</section> | ||||
<section title="Design Decisions"> | ||||
<t> | ||||
The application of security services in a DTN is a complex endeavor | ||||
that must consider physical properties of the network (such as connectivit y and | that must consider physical properties of the network (such as connectivit y and | |||
propagation times), policies at | propagation times), policies at | |||
each node, application security requirements, and current and future | each node, application security requirements, and current and future | |||
threat environments. This section | threat environments. This section | |||
identifies those desirable properties that guide design decisions for | identifies those desirable properties that guide design decisions for | |||
this specification and are necessary for understanding the format and | this specification and that are necessary for understanding the format and | |||
behavior of the BPSec protocol. | behavior of the BPSec protocol. | |||
</t> | </t> | |||
<section numbered="true" toc="default"> | ||||
<section title="Block-Level Granularity"> | <name>Block-Level Granularity</name> | |||
<t> | ||||
<t> | ||||
Security services within this specification must allow different | Security services within this specification must allow different | |||
blocks within a bundle to have different security services | blocks within a bundle to have different security services | |||
applied to them. | applied to them. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
Blocks within a bundle represent different types of information. The | Blocks within a bundle represent different types of information. The | |||
primary block contains identification and routing information. The | primary block contains identification and routing information. The | |||
payload block carries application data. Extension blocks carry a | payload block carries application data. Extension blocks carry a | |||
variety of data that may augment or annotate the payload, or | variety of data that may augment or annotate the payload or that | |||
otherwise provide information necessary for the proper processing | otherwise provide information necessary for the proper processing | |||
of a bundle along a path. Therefore, applying a single level and | of a bundle along a path. Therefore, applying a single level and | |||
type of security across an entire bundle | type of security across an entire bundle | |||
fails to recognize that blocks in a bundle represent different | fails to recognize that blocks in a bundle represent different | |||
types of information with different security needs. | types of information with different security needs. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
For example, a payload block might be encrypted to | For example, a payload block might be encrypted to | |||
protect its contents and an extension block containing | protect its contents and an extension block containing | |||
summary information related to the payload might be integrity | summary information related to the payload might be integrity | |||
signed but unencrypted to provide waypoints access | signed but unencrypted to provide waypoints access | |||
to payload-related data without providing access to the payload. | to payload-related data without providing access to the payload. | |||
</t> | </t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>Multiple Security Sources</name> | ||||
<section title="Multiple Security Sources"> | <t> | |||
A bundle can have multiple security blocks, and these blocks can | ||||
<t> | have different security sources. BPSec implementations <bcp14>MUST | |||
A bundle can have multiple security blocks and these blocks can | NOT</bcp14> assume that all blocks in a bundle have the same security | |||
have different security sources. BPSec implementations MUST | ||||
NOT assume that all blocks in a bundle have the same security | ||||
operations applied to them. | operations applied to them. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
The Bundle Protocol allows extension blocks to be added to a bundle | The Bundle Protocol allows extension blocks to be added to a bundle | |||
at any time during its existence in the DTN. When a waypoint | at any time during its existence in DTN. When a waypoint | |||
adds a new extension block to a bundle, that extension block | adds a new extension block to a bundle, that extension block | |||
MAY have security services applied to it by that waypoint. Similarly, | <bcp14>MAY</bcp14> have security services applied to it by that waypoin | |||
a waypoint MAY add a security service to an existing | t. Similarly, | |||
a waypoint <bcp14>MAY</bcp14> add a security service to an existing | ||||
block, consistent with its security policy. | block, consistent with its security policy. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
When a waypoint adds a security service to the bundle, the waypoint | When a waypoint adds a security service to the bundle, the waypoint | |||
is the security source for that service. The security block(s) | is the security source for that service. The security block(s) | |||
which represent that service in the bundle may need to record this | that represent that service in the bundle may need to record this | |||
security source as the bundle destination might need this information | security source, as the bundle destination might need this information | |||
for processing. | for processing. | |||
</t> | </t> | |||
<t> | <t> | |||
For example, a bundle source may choose to apply an integrity service | For example, a bundle source may choose to apply an integrity service | |||
to its plain text payload. Later a waypoint node, representing a | to its plaintext payload. Later a waypoint node, representing a | |||
gateway to another portion of the DTN, may receive the bundle and | gateway to another portion of the delay-tolerant network, may receive t | |||
he bundle and | ||||
choose to apply a confidentiality service. In this case, the | choose to apply a confidentiality service. In this case, the | |||
integrity security source is the bundle source and the | integrity security source is the bundle source and the | |||
confidentiality security source is the waypoint node. | confidentiality security source is the waypoint node. | |||
</t> | </t> | |||
<t> | <t> | |||
In cases where the security source and security acceptor are not the | In cases where the security source and security acceptor are not the | |||
bundle source and bundle destination, it is possible that the bundle | bundle source and bundle destination, respectively, it is possible that the bundle | |||
will reach the bundle destination prior to reaching a security | will reach the bundle destination prior to reaching a security | |||
acceptor. In cases where this may be a practical problem, it is | acceptor. In cases where this may be a practical problem, it is | |||
recommended that solutions such as bundle encapsulation can be | recommended that solutions such as bundle encapsulation be | |||
used to ensure that a bundle be delivered to a security acceptor | used to ensure that a bundle be delivered to a security acceptor | |||
prior to being delivered to the bundle destination. Generally, | prior to being delivered to the bundle destination. Generally, | |||
if a bundle reaches a waypoint that has the appropriate configuration | if a bundle reaches a waypoint that has the appropriate configuration | |||
and policy to act as a security acceptor for a security service in | and policy to act as a security acceptor for a security service in | |||
the bundle, then the waypoint should act as that security acceptor. | the bundle, then the waypoint should act as that security acceptor. | |||
</t> | </t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>Mixed Security Policy</name> | ||||
<section title="Mixed Security Policy"> | <t> | |||
The security policy enforced by nodes in the delay-tolerant network may | ||||
<t> | differ. | |||
The security policy enforced by nodes in the DTN may differ. | </t> | |||
</t> | <t> | |||
Some waypoints will have security policies that require the waypoint | ||||
<t> | to evaluate security services even if the waypoint is neither the | |||
Some waypoints will have security policies that require | bundle destination nor the final intended acceptor of the service. | |||
evaluating security services even if they are not the bundle | ||||
destination or the final intended acceptor of the service. | ||||
For example, a waypoint could choose to | For example, a waypoint could choose to | |||
verify an integrity service even though the waypoint is not | verify an integrity service even though the waypoint is not | |||
the bundle destination and the integrity service will be needed | the bundle destination and the integrity service will be needed | |||
by other nodes along the bundle's path. | by other nodes along the bundle's path. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
Some waypoints will determine, through policy, that they are the | Some waypoints will determine, through policy, that they are the | |||
intended recipient of the security service and terminate the | intended recipient of the security service and will terminate the | |||
security service in the bundle. For example, a gateway node could | security service in the bundle. For example, a gateway node could | |||
determine that, even though it is not the destination of the bundle, | determine that, even though it is not the destination of the bundle, | |||
it should verify and remove a particular integrity service or | it should verify and remove a particular integrity service or | |||
attempt to decrypt a confidentiality service, before forwarding the | attempt to decrypt a confidentiality service, before forwarding the | |||
bundle along its path. | bundle along its path. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
Some waypoints could understand security blocks but refuse to | Some waypoints could understand security blocks but refuse to | |||
process them unless they are the bundle destination. | process them unless they are the bundle destination. | |||
</t> | </t> | |||
</section> | ||||
</section> | <section numbered="true" toc="default"> | |||
<name>User-Defined Security Contexts</name> | ||||
<section title="User-Defined Security Contexts"> | <t> | |||
<t> | A security context is the set of assumptions, algorithms, configuration | |||
A security context is the union of security algorithms (cipher | s, | |||
suites), policies associated with the use of those algorithms, and | and policies used to implement security services. Different contexts may s | |||
configuration values. Different contexts may specify different | pecify different | |||
algorithms, different polices, or different configuration values used | algorithms, different polices, or different configuration values used | |||
in the implementation of their security services. BPSec provides | in the implementation of their security services. BPSec provides | |||
a mechanism to define security contexts. Users may select from | a mechanism to define security contexts. Users may select from | |||
registered security contexts and customize those contexts through | registered security contexts and customize those contexts through | |||
security context parameters. | security context parameters. | |||
</t> | </t> | |||
<t> | <t> | |||
For example, some users might prefer a | For example, some users might prefer a | |||
SHA2 hash function for integrity whereas other users might prefer a | SHA2 hash function for integrity, whereas other users might prefer a | |||
SHA3 hash function. Providing either separate security contexts or a si ngle, | SHA3 hash function. Providing either separate security contexts or a si ngle, | |||
parameterized security context allows users flexibility in applying | parameterized security context allows users flexibility in applying | |||
the desired cipher suite, policy, and configuration when populating | the desired cipher suite, policy, and configuration when populating | |||
a security block. | a security block. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Deterministic Processing"> | <name>Deterministic Processing</name> | |||
<t> | <t> | |||
Whenever a node determines that it must process more than one | Whenever a node determines that it must process more than one | |||
security block in a received bundle (either because the policy | security block in a received bundle (either because the policy | |||
at a waypoint states that it should process security blocks or | at a waypoint states that it should process security blocks or | |||
because the node is the bundle destination) the order in which | because the node is the bundle destination), the order in which | |||
security blocks are processed must be deterministic. All nodes | security blocks are processed must be deterministic. All nodes | |||
must impose this same deterministic processing order for all | must impose this same deterministic processing order for all | |||
security blocks. This specification provides | security blocks. This specification provides | |||
determinism in the application and evaluation of security | determinism in the application and evaluation of security | |||
services, even when doing so results in a loss of flexibility. | services, even when doing so results in a loss of flexibility. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | ||||
</section> | <section anchor="sec_blocks" numbered="true" toc="default"> | |||
<name>Security Blocks</name> | ||||
<section anchor="sec_blocks" title="Security Blocks"> | <section anchor="sec_blocks_def" numbered="true" toc="default"> | |||
<name>Block Definitions</name> | ||||
<section anchor="sec_blocks_def" title="Block Definitions"> | <t> | |||
<t> | ||||
This specification defines two types of security block: the Block | This specification defines two types of security block: the Block | |||
Integrity Block (BIB) and the Block Confidentiality Block (BCB). | Integrity Block (BIB) and the Block Confidentiality Block (BCB). | |||
<list> | </t> | |||
<t> | <ul spacing="normal"> | |||
The BIB is used to ensure the integrity of its plain text | <li> | |||
security target(s). The integrity information in the BIB MAY be | The BIB is used to ensure the integrity of its plaintext | |||
security target(s). The integrity information in the BIB <bcp14>M | ||||
AY</bcp14> be | ||||
verified by any node along the bundle path from the BIB | verified by any node along the bundle path from the BIB | |||
security source to the bundle destination. Waypoints add or remov e BIBs from bundles in accordance with | security source to the bundle destination. Waypoints add or remov e BIBs from bundles in accordance with | |||
their security policy. BIBs are never used for integrity protecti on | their security policy. BIBs are never used for integrity protecti on | |||
of the cipher text provided by a BCB. Because security policy at | of the ciphertext provided by a BCB. Because security policy at | |||
BPSec nodes may differ regarding integrity verification, BIBs do not | BPSec nodes may differ regarding integrity verification, BIBs do not | |||
guarantee hop-by-hop authentication, as discussed in <xref target | guarantee hop-by-hop authentication, as discussed in <xref target | |||
="sup_sec_svc"/>. | ="sup_sec_svc" format="default"/>. | |||
</t> | </li> | |||
<li> | ||||
<t> | The BCB indicates that the security target or targets have been | |||
The BCB indicates that the security target(s) have been | ||||
encrypted at the BCB security source in order to protect their | encrypted at the BCB security source in order to protect their | |||
content while in transit. The BCB is decrypted by security accept or | content while in transit. As a matter of security policy, the BCB is decrypted by security acceptor | |||
nodes in the network, up to and including the bundle | nodes in the network, up to and including the bundle | |||
destination, as a matter of security policy. BCBs additionally | destination. BCBs additionally | |||
provide integrity protection mechanisms for the cipher text they | provide integrity-protection mechanisms for the ciphertext they | |||
generate. | generate. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | </section> | |||
</section> | <section anchor="sec_blocks_uni" toc="default" numbered="true"> | |||
<name>Uniqueness</name> | ||||
<section anchor="sec_blocks_uni" title="Uniqueness" toc="default"> | <t> | |||
Security operations in a bundle <bcp14>MUST</bcp14> be unique; the same | ||||
<t> | security | |||
Security operations in a bundle MUST be unique; the same security | service <bcp14>MUST NOT</bcp14> be applied to a security target more th | |||
service MUST NOT be applied to a security target more than once in a | an once in a | |||
bundle. Since a security operation is represented by a security | bundle. Since a security operation is represented by a security | |||
block, this means that multiple security blocks of the same type cannot | block, this means that multiple security blocks of the same type cannot | |||
share the same security targets. A new security block MUST NOT be added | share the same security targets. A new security block <bcp14>MUST NOT</ | |||
to a bundle if a pre-existing security block of the same type is | bcp14> be added | |||
to a bundle if a preexisting security block of the same type is | ||||
already defined for the security target of the new security block. | already defined for the security target of the new security block. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
This uniqueness requirement ensures that there is no ambiguity related | This uniqueness requirement ensures that there is no ambiguity related | |||
to the order in which security blocks are processed or how security pol icy | to the order in which security blocks are processed or how security pol icy | |||
can be specified to require certain security services be present in a | can be specified to require certain security services be present in a | |||
bundle. | bundle. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
Using the notation OP(service, target), several examples illustrate | Using the notation OP(service, target), several examples illustrate | |||
this uniqueness requirement. | this uniqueness requirement. | |||
<list style="symbols"> | </t> | |||
<t> | <dl spacing="normal"> | |||
Signing the payload twice: The two operations OP(bib-integrity, | <dt>Signing the payload twice:</dt><dd>The two operations OP(bib-integ | |||
payload) and OP(bib-integrity, payload) are redundant and MUST NO | rity, | |||
T | payload) and OP(bib-integrity, payload) are redundant and <bcp14> | |||
MUST NOT</bcp14> | ||||
both be present in the same bundle at the same time. | both be present in the same bundle at the same time. | |||
</t> | </dd> | |||
<dt>Signing different blocks:</dt><dd>The two operations | ||||
<t> | OP(bib-integrity, payload) and OP(bib-integrity, | |||
Signing different blocks: The two operations OP(bib-integrity, | extension_block_1) are not redundant and both may be present | |||
payload) and OP(bib-integrity, extension_block_1) are not redunda | in the same bundle at the same time. Similarly, the two | |||
nt | operations OP(bib-integrity, extension_block_1) and | |||
and both may be present in the same bundle at the same time. | OP(bib-integrity, extension_block_2) are also not redundant | |||
Similarly, the two operations OP(bib-integrity, extension_block_1 | and may both be present in the bundle at the same time. | |||
) | </dd> | |||
and OP(bib-integrity, extension_block_2) are also not redundant a | <dt>Different services on same block:</dt><dd>The two | |||
nd | operations OP(bib-integrity, payload) and | |||
may both be present in the bundle at the same time. | OP(bcb-confidentiality, payload) are not inherently | |||
</t> | redundant and may both be present in the bundle at the same | |||
<t> | time, pursuant to other processing rules in this | |||
Different Services on same block: The two operations | specification. | |||
OP(bib-integrity, payload) and OP(bcb-confidentiality, payload) a | </dd> | |||
re not | <dt>Different services from different block | |||
inherently redundant and may both be present in the bundle at | types:</dt><dd>The notation OP(service, target) refers | |||
the same time, pursuant to other processing rules in this | specifically to a security block, as the security block is | |||
specification. | the embodiment of a security service applied to a security | |||
</t> | target in a bundle. Were some Other Security Block (OSB) to | |||
<t> | be defined providing an integrity service, then the | |||
Different services from different block types: The notation | operations OP(bib-integrity, target) and OP(osb-integrity, | |||
OP(service, target) refers specifically to a security block, as t | target) <bcp14>MAY</bcp14> both be present in the same | |||
he | bundle if so allowed by the definition of the OSB, as | |||
security block is the embodiment of a security service applied to | discussed in <xref target="Extensions" format="default"/>. | |||
a security | </dd> | |||
target in a bundle. Were some Other Security Block (OSB) to be de | </dl> | |||
fined | <t> | |||
providing an integrity service, then the operations OP(bib-integr | ||||
ity, target) | ||||
and OP(osb-integrity, target) MAY both be present in the same bun | ||||
dle if so allowed | ||||
by the definition of the OSB, as discussed in <xref target="Exten | ||||
sions"/>. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | ||||
NOTES: | NOTES: | |||
<list style="bullets"> | </t> | |||
<t> | <ul spacing="normal"> | |||
A security block may be removed from a bundle as part of security | <li> | |||
processing | A security block may be removed from a bundle as part | |||
at a waypoint node with a new security block being added to the b | of security processing at a waypoint node with a new | |||
undle by that | security block being added to the bundle by that | |||
node. In this case, conflicting security blocks never co-exist in | node. In this case, conflicting security blocks never | |||
the bundle at the same | coexist in the bundle at the same time and the | |||
time and the uniqueness requirement is not violated. | uniqueness requirement is not violated. | |||
</t> | </li> | |||
<li> | ||||
<t> | A ciphertext integrity-protection mechanism (such as associated | |||
A cipher text integrity mechanism (such as associated authenticat | authenticated data) calculated by a cipher suite and | |||
ed data) calculated | transported in a BCB is considered part of the | |||
by a cipher suite and transported in a BCB is considered part of | confidentiality service; therefore, it is unique from the | |||
the confidentiality | plaintext integrity service provided by a BIB. | |||
service and, therefore, unique from the plain text integrity serv | </li> | |||
ice provided by a BIB. | <li> | |||
</t> | The security blocks defined in this specification (BIB | |||
and BCB) are designed with the intention that the BPA | ||||
<t> | adding these blocks is the authoritative source of the | |||
The security blocks defined in this specification (BIB and BCB) a | security service. If a BPA adds a BIB on a security | |||
re designed with | target, then the BIB is expected to be the | |||
the intention that the BPA adding these blocks is the authoritati | authoritative source of integrity for that security | |||
ve source of the | target. If a BPA adds a BCB to a security target, then | |||
security service. If a BPA adds a BIB on a security target, then | the BCB is expected to be the authoritative source of | |||
the BIB is expected | confidentiality for that security target. More complex | |||
to be the authoritative source of integrity for that security tar | scenarios, such as having multiple nodes in a network | |||
get. If a BPA adds | sign the same security target, can be accommodated | |||
a BCB to a security target, then the BCB is expected to be the au | using the definition of custom security contexts (see <xref | |||
thoritative source | target="sec_ctx" format="default"/>) and/or the | |||
of confidentiality for that security target. More complex scenari | definition of OSBs (see <xref | |||
os, such as | target="Extensions" format="default"/>). | |||
having multiple nodes in a network sign the same security target, | </li> | |||
can be | </ul> | |||
accommodated using the definition of custom security contexts | </section> | |||
(<xref target="sec_ctx"/>) and/or the definition of other securit | <section anchor="sec_blocks_mult" toc="default" numbered="true"> | |||
y blocks (<xref target="Extensions"/>). | <name>Target Multiplicity</name> | |||
</t> | <t> | |||
A single security block <bcp14>MAY</bcp14> represent | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section anchor="sec_blocks_mult" title="Target Multiplicity" toc="default"> | ||||
<t> | ||||
A single security block MAY represent | ||||
multiple security operations as a way of reducing the overall number | multiple security operations as a way of reducing the overall number | |||
of security blocks present in a bundle. In these circumstances, | of security blocks present in a bundle. In these circumstances, | |||
reducing the number of security blocks in the bundle reduces the | reducing the number of security blocks in the bundle reduces the | |||
amount of redundant information in the bundle. | amount of redundant information in the bundle. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
A set of security operations can be represented by a single security | A set of security operations can be represented by a single security | |||
block when all of the following conditions are true. | block when all of the following conditions are true. | |||
<list style="symbols"> | </t> | |||
<t> | <ul spacing="normal"> | |||
<li> | ||||
The security operations apply the same security service. For | The security operations apply the same security service. For | |||
example, they are all integrity operations or all | example, they are all integrity operations or all | |||
confidentiality operations. | confidentiality operations. | |||
</t> | </li> | |||
<t> | <li> | |||
The security context parameters for the | The security context parameters for the | |||
security operations are identical. | security operations are identical. | |||
</t> | </li> | |||
<t> | <li> | |||
The security source for the security operations is the same, | The security source for the security operations is the same, | |||
meaning the set of operations are being added by the | meaning the set of operations are being added by the | |||
same node. | same node. | |||
</t> | </li> | |||
<t> | <li> | |||
No security operations have the same security target, as that | No security operations have the same security target, as that | |||
would violate the need for security operations to be unique. | would violate the need for security operations to be unique. | |||
</t> | </li> | |||
<t> | <li> | |||
None of the security operations conflict with security | None of the security operations conflict with security | |||
operations already present in the bundle. | operations already present in the bundle. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <t> | |||
<t> | ||||
When representing multiple security operations in a single security | When representing multiple security operations in a single security | |||
block, the information that is common across all operations is | block, the information that is common across all operations is | |||
represented once in the security block, and the information which is | represented once in the security block; the information that is | |||
different (e.g., the security targets) are represented individually. | different (e.g., the security targets) is represented individually. | |||
</t> | </t> | |||
<t> | <t> | |||
It is RECOMMENDED that if a node processes any security operation in | If a node processes any security operation in a security block, it is < | |||
a security block that it process all security operations in the | bcp14>RECOMMENDED</bcp14> that it process all | |||
security block. This allows security sources to assert that the set of | security operations in the security block. This allows | |||
security operations in a security block are expected to be processed | security sources to assert that the set of security | |||
by the same security acceptor. However, the determination | operations in a security block are expected to be processed | |||
of whether a node actually is a security acceptor or not is a matter | by the same security acceptor. However, the determination of | |||
of the policy of the node itself. In cases where a receiving node | whether a node actually is a security acceptor or not is a | |||
determines that it is the security acceptor of only a subset of the | matter of the policy of the node itself. In cases where a | |||
security operations in a security block, the node may choose to only | receiving node determines that it is the security acceptor of | |||
process that subset of security operations. | only a subset of the security operations in a security block, | |||
</t> | the node may choose to only process that subset of security | |||
</section> | operations. | |||
</t> | ||||
<section anchor="sec_blocks_tgtid" title="Target Identification"> | </section> | |||
<t> | <section anchor="sec_blocks_tgtid" numbered="true" toc="default"> | |||
<name>Target Identification</name> | ||||
<t> | ||||
A security target is a block in the bundle to which a security | A security target is a block in the bundle to which a security | |||
service applies. This target must be uniquely and unambiguously | service applies. This target must be uniquely and unambiguously | |||
identifiable when processing a security block. The definition of the | identifiable when processing a security block. The definition of the | |||
extension block header from <xref target="I-D.ietf-dtn-bpbis"/> | extension block header from <xref target="RFC9171" format="default"/> | |||
provides a "Block Number" field suitable for this purpose. Therefore, | provides a "block number" field suitable for this purpose. Therefore, | |||
a security target in a security block MUST be represented as the | a security target in a security block <bcp14>MUST</bcp14> be represente | |||
Block Number of the target block. | d as the | |||
</t> | block number of the target block. | |||
</section> | </t> | |||
</section> | ||||
<section anchor="sec_blocks_rep" title="Block Representation" toc="default"> | <section anchor="sec_blocks_rep" toc="default" numbered="true"> | |||
<t> | <name>Block Representation</name> | |||
<t> | ||||
Each security block uses the Canonical Bundle Block Format as | Each security block uses the Canonical Bundle Block Format as | |||
defined in <xref target="I-D.ietf-dtn-bpbis"/>. That is, each | defined in <xref target="RFC9171" format="default"/>. That is, each | |||
security block is comprised of the following elements: | security block is comprised of the following elements: | |||
<list style="symbols"> | </t> | |||
<t>block type code</t> | <ul spacing="compact"> | |||
<t>block number </t> | <li>block type code</li> | |||
<t>block processing control flags</t> | <li>block number </li> | |||
<t>CRC type</t> | <li>block processing control flags</li> | |||
<t>block-type-specific-data</t> | <li>cyclic redundancy check (CRC) type</li> | |||
<t>CRC field (if present)</t> | <li>block-type-specific data</li> | |||
</list> | <li>CRC field (if present)</li> | |||
</t> | </ul> | |||
<t> | ||||
<t> | ||||
Security-specific information for a security block is captured in the | Security-specific information for a security block is captured in the | |||
block-type-specific-data field. | block-type-specific data field. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec_blocks_asb" numbered="true" toc="default"> | ||||
<section anchor="sec_blocks_asb" title="Abstract Security Block"> | <name>Abstract Security Block</name> | |||
<t> | <t> | |||
The structure of the security-specific portions of a security block | The structure of the security-specific portions of a security block | |||
is identical for both the BIB and BCB Block Types. Therefore, this | is identical for both the BIB and BCB block types. Therefore, this | |||
section defines an Abstract Security Block (ASB) data structure and | section defines an Abstract Security Block (ASB) data structure and | |||
discusses the definition, processing, and other constraints for using | discusses its definition, its processing, and other constraints for usi ng | |||
this structure. An ASB is never directly instantiated within a | this structure. An ASB is never directly instantiated within a | |||
bundle, it is only a mechanism for discussing the common aspects of | bundle, it is only a mechanism for discussing the common aspects of | |||
BIB and BCB security blocks. | BIB and BCB security blocks. | |||
</t> | </t> | |||
<t> | ||||
<t> | The fields of the ASB <bcp14>SHALL</bcp14> be as follows, | |||
The fields of the ASB SHALL be as follows, listed in the order in | listed in the order in which they must appear. The encoding | |||
which they must appear. The encoding of these fields MUST be in | of these fields <bcp14>MUST</bcp14> be in accordance with the | |||
accordance with the canonical forms provided in <xref target="CanonBund | canonical forms provided in <xref target="CanonBundle" | |||
le"/>. | format="default"/>. | |||
<list style="hanging" hangIndent="6"> | ||||
<t hangText="Security Targets:"> <vspace/> | ||||
This field identifies the block(s) targeted by the security | ||||
operation(s) represented by this security block. Each target | ||||
block is represented by its unique Block Number. This field | ||||
SHALL be represented by a CBOR array of data items. Each target | ||||
within this CBOR array SHALL be represented by a CBOR unsigned | ||||
integer. This array MUST have at least 1 entry and each entry | ||||
MUST represent the Block Number of a block that exists in the | ||||
bundle. There MUST NOT be duplicate entries in this array. The | ||||
order of elements in this list has no semantic meaning outside of | ||||
the context of this block. Within the block, the ordering of | ||||
targets must match the ordering of results associated with | ||||
these targets. | ||||
</t> | ||||
<t hangText="Security Context Id:"> <vspace/> | ||||
This field identifies the security context used to implement | ||||
the security service represented by this block and applied to | ||||
each security target. This field SHALL be represented by a CBOR | ||||
unsigned integer. The values for this Id should come from the | ||||
registry defined in <xref target="SecCtx"/> | ||||
</t> | ||||
<t hangText="Security Context Flags:"> <vspace/> | ||||
This field identifies which optional fields are present in the | ||||
security block. This field SHALL be represented as a CBOR | ||||
unsigned integer whose contents shall be | ||||
interpreted as a bit field. Each bit in this bit field indicates | ||||
the presence (bit set to 1) or absence (bit set to 0) of | ||||
optional data in the security block. The association of bits to | ||||
security block data is defined as follows. | ||||
<list style="hanging" hangIndent="7"> | </t> | |||
<t hangText="Bit 0"> (the least-significant bit, 0x01): Securi | <dl newline="true" spacing="normal" indent="6"> | |||
ty Context | <dt>Security Targets:</dt> | |||
Parameters Present Flag. </t> | <dd> | |||
<t hangText="Bit >0">Reserved </t> | This field identifies the block(s) targeted by the | |||
</list> | security operation(s) represented by this security | |||
block. Each target block is represented by its unique | ||||
block number. This field <bcp14>SHALL</bcp14> be | ||||
represented by a Concise Binary Object Representation | ||||
(CBOR) array of data items. Each target within this | ||||
CBOR array <bcp14>SHALL</bcp14> be represented by a | ||||
CBOR unsigned integer. This array <bcp14>MUST</bcp14> | ||||
have at least one entry and each entry | ||||
<bcp14>MUST</bcp14> represent the block number of a | ||||
block that exists in the bundle. There <bcp14>MUST | ||||
NOT</bcp14> be duplicate entries in this array. The | ||||
order of elements in this list has no semantic meaning | ||||
outside of the context of this block. Within the block, | ||||
the ordering of targets must match the ordering of | ||||
results associated with these targets. | ||||
</dd> | ||||
<dt>Security Context Id:</dt> | ||||
<dd> | ||||
This field identifies the security context used to | ||||
implement the security service represented by this | ||||
block and applied to each security target. This field | ||||
<bcp14>SHALL</bcp14> be represented by a CBOR unsigned | ||||
integer. The values for this Id should come from the | ||||
registry defined in <xref target="SecCtx" | ||||
format="default"/>. | ||||
</dd> | ||||
<dt>Security Context Flags:</dt> | ||||
<dd> | ||||
<t> | ||||
This field identifies which optional fields are present | ||||
in the security block. This field <bcp14>SHALL</bcp14> | ||||
be represented as a CBOR unsigned integer whose | ||||
contents shall be interpreted as a bit field. Each bit | ||||
in this bit field indicates the presence (bit set to 1) | ||||
or absence (bit set to 0) of optional data in the | ||||
security block. The association of bits to security | ||||
block data is defined as follows. | ||||
Implementations MUST set reserved bits to 0 when writing this | ||||
field and MUST ignore the values of reserved bits when reading th | ||||
is | ||||
field. For unreserved bits, a value of 1 indicates that the asso | ||||
ciated | ||||
security block field MUST be included in the security block. A | ||||
value of 0 indicates that the associated security block field | ||||
MUST NOT be in the security block. | ||||
</t> | </t> | |||
<dl newline="false" spacing="normal" indent="10"> | ||||
<dt>Bit 0</dt> | ||||
<dd> (the least-significant bit, 0x01): "Security context | ||||
parameters present" flag. </dd> | ||||
<dt>Bit >0</dt> | ||||
<dd>Reserved </dd> | ||||
</dl> | ||||
<t> | ||||
<t hangText="Security Source:"> <vspace/> | Implementations <bcp14>MUST</bcp14> set reserved bits | |||
This field identifies the Endpoint that inserted the security | to 0 when writing this field and <bcp14>MUST</bcp14> | |||
block in the bundle. This field SHALL be | ignore the values of reserved bits when reading this | |||
represented by a CBOR array in accordance with | field. For unreserved bits, a value of 1 indicates | |||
<xref target="I-D.ietf-dtn-bpbis"/> rules for | that the associated security block field | |||
representing Endpoint Identifiers (EIDs). | <bcp14>MUST</bcp14> be included in the security | |||
block. A value of 0 indicates that the associated | ||||
security block field <bcp14>MUST NOT</bcp14> be in the | ||||
security block. | ||||
</t> | </t> | |||
</dd> | ||||
<t hangText="Security Context Parameters (Optional):"> <vspace/> | <dt>Security Source:</dt> | |||
<dd> | ||||
This field identifies the BPA that inserted the security block | ||||
in the bundle. Also, any node ID of the node of which the BPA | ||||
is a component. This field <bcp14>SHALL</bcp14> be | ||||
represented by a CBOR array in accordance with the rules in | ||||
<xref target="RFC9171" format="default"/> for | ||||
representing endpoint IDs (EIDs). | ||||
</dd> | ||||
<dt>Security Context Parameters (Optional):</dt> | ||||
<dd> | ||||
<t> | ||||
This field captures one or more security context parameters | This field captures one or more security context parameters | |||
that should be used when processing | that should be used when processing | |||
the security service described by this security block. This | the security service described by this security block. This | |||
field SHALL be represented by a CBOR array. Each entry in this | field <bcp14>SHALL</bcp14> be represented by a CBOR array. Each entry in this | |||
array is a single security context parameter. A single | array is a single security context parameter. A single | |||
parameter SHALL also be represented as a CBOR array comprising | parameter <bcp14>SHALL</bcp14> also be represented as a CBOR arra | |||
a 2-tuple of the id and value of the parameter, as follows. | y comprising | |||
a 2-tuple of the Id and value of the parameter, as follows. | ||||
<list style="symbols"> | </t> | |||
<t> | <dl spacing="normal"> | |||
Parameter Id. This field identifies which | <dt>Parameter Id:</dt><dd>This field identifies which | |||
parameter is being specified. This field SHALL be | parameter is being specified. This field <bcp14>SHALL</bcp1 | |||
4> be | ||||
represented as a CBOR unsigned integer. Parameter Ids | represented as a CBOR unsigned integer. Parameter Ids | |||
are selected as described in <xref target="parmresult"/>. | are selected as described in <xref target="parmresult" form | |||
</t> | at="default"/>. | |||
<t> | </dd> | |||
Parameter Value. This field captures the value | <dt>Parameter Value:</dt><dd>This field captures the value | |||
associated with this parameter. This field SHALL be | associated with this parameter. This field <bcp14>SHALL</bc | |||
p14> be | ||||
represented by the applicable CBOR representation of the | represented by the applicable CBOR representation of the | |||
parameter, in accordance with <xref target="parmresult"/>. | parameter, in accordance with <xref target="parmresult" for | |||
</t> | mat="default"/>. | |||
</list> | </dd> | |||
<vspace/><vspace/> | </dl> | |||
<t> | ||||
The logical layout of the parameters array is | The logical layout of the parameters array is | |||
illustrated in <xref target="parms_tbl"/>. | illustrated in <xref target="parms_tbl" format="default"/>. | |||
<figure anchor="parms_tbl" title="Security Context Parameters"> | ||||
<artwork align="center">
<!-- | ||||
-->+----------------+----------------+ +--------------- | ||||
-+
<!-- | ||||
-->| Parameter 1 | Parameter 2 | ... | Parameter N | ||||
|
<!-- | ||||
-->+------+---------+------+---------+ +------+-------- | ||||
-+
<!-- | ||||
-->| Id | Value | Id | Value | | Id | Value | ||||
|
<!-- | ||||
-->+------+---------+------+---------+ +------+-------- | ||||
-+ | ||||
</artwork> | ||||
</figure> | ||||
</t> | </t> | |||
<figure anchor="parms_tbl"> | ||||
<name>Security Context Parameters</name> | ||||
<artwork align="center" name="" type="" alt=""> | ||||
+----------------+----------------+ +----------------+ | ||||
| Parameter 1 | Parameter 2 | ... | Parameter N | | ||||
+------+---------+------+---------+ +------+---------+ | ||||
| Id | Value | Id | Value | | Id | Value | | ||||
+------+---------+------+---------+ +------+---------+</artwork> | ||||
</figure> | ||||
</dd> | ||||
<t hangText="Security Results:"> <vspace/> | <dt>Security Results:</dt> | |||
<dd> | ||||
<t> | ||||
This field captures the results of applying a security service | This field captures the results of applying a security service | |||
to the security targets of the security block. This field SHALL | to the security targets of the security block. This field <bcp14> SHALL</bcp14> | |||
be represented as a CBOR array of target results. Each entry in | be represented as a CBOR array of target results. Each entry in | |||
this array represents the set of security results for a | this array represents the set of security results for a | |||
specific security target. The target results MUST be ordered | specific security target. The target results <bcp14>MUST</bcp14> be ordered | |||
identically to the Security Targets field of the security block. | identically to the Security Targets field of the security block. | |||
This means that the first set of target results in this array | This means that the first set of target results in this array | |||
corresponds to the first entry in the Security Targets field of | corresponds to the first entry in the Security Targets field of | |||
the security block, and so on. There MUST be one entry in this | the security block, and so on. There <bcp14>MUST</bcp14> be one e ntry in this | |||
array for each entry in the Security Targets field of the | array for each entry in the Security Targets field of the | |||
security block. | security block. | |||
<vspace/> <vspace/> | </t> | |||
<t> | ||||
The set of security results for a target is also represented as | The set of security results for a target is also represented as | |||
a CBOR array of individual results. An individual result is | a CBOR array of individual results. An individual result is | |||
represented as a 2-tuple of a result id and a result value, | represented as a CBOR array comprising a 2-tuple of a result Id a nd a result value, | |||
defined as follows. | defined as follows. | |||
<list style="symbols"> | </t> | |||
<t> | <dl spacing="normal"> | |||
Result Id. This field identifies which security result is | <dt>Result Id:</dt><dd>This field identifies which security result | |||
is | ||||
being specified. Some security results capture the | being specified. Some security results capture the | |||
primary output of a cipher suite. Other security results | primary output of a cipher suite. Other security results | |||
contain additional annotative information from cipher | contain additional annotative information from cipher | |||
suite processing. This field SHALL be represented as a | suite processing. This field <bcp14>SHALL</bcp14> be repres ented as a | |||
CBOR unsigned integer. Security result Ids will be as | CBOR unsigned integer. Security result Ids will be as | |||
specified in <xref target="parmresult"/>. | specified in <xref target="parmresult" format="default"/>. | |||
</t> | </dd> | |||
<t> | <dt>Result Value:</dt><dd>This field captures the value associated | |||
Result Value. This field captures the value associated | with the result. This field <bcp14>SHALL</bcp14> be represe | |||
with the result. This field SHALL be represented by the | nted by the | |||
applicable CBOR representation of the result value, in | applicable CBOR representation of the result value, in | |||
accordance with <xref target="parmresult"/>. | accordance with <xref target="parmresult" format="default"/ | |||
</t> | >. | |||
</list> | </dd> | |||
</dl> | ||||
<t> | ||||
The logical layout of the security results array is illustrated | The logical layout of the security results array is illustrated | |||
in <xref target="res_tbl"/>. In this figure there are N | in <xref target="res_tbl" format="default"/>. In this figure, the re are N | |||
security targets for this security block. The first security | security targets for this security block. The first security | |||
target contains M results and the Nth security target contains | target contains M results and the Nth security target contains | |||
K results. | K results. | |||
<figure anchor="res_tbl" title="Security Results"> | ||||
<artwork align="center">
<!-- | ||||
-->+------------------------------+ +------------------ | ||||
------------+
<!-- | ||||
-->| Target 1 | | Target | ||||
N |
<!-- | ||||
-->+------------+----+------------+ +------------------ | ||||
------------+
<!-- | ||||
-->| Result 1 | | Result M | ... | Result 1 | | | ||||
Result K |
<!-- | ||||
-->+----+-------+ .. +----+-------+ +----+-------+ .. + | ||||
----+-------+
<!-- | ||||
-->| Id | Value | | Id | Value | | Id | Value | | | ||||
Id | Value |
<!-- | ||||
-->+----+-------+ +----+-------+ +----+-------+ + | ||||
----+-------+ | ||||
</artwork> | ||||
</figure> | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section anchor="BIB" title="Block Integrity Block" toc="default"> | ||||
<t> | ||||
A BIB is a bundle extension block with the following characteristics. | ||||
<list> | ||||
<t> | ||||
The Block Type Code value is as specified in | ||||
<xref target="BlockType"/>. | ||||
</t> | </t> | |||
<figure anchor="res_tbl"> | ||||
<name>Security Results</name> | ||||
<artwork align="center" name="" type="" alt=""> | ||||
+--------------------------+ +---------------------------+ | ||||
| Target 1 | | Target N | | ||||
+----------+----+----------+ +---------------------------+ | ||||
| Result 1 | | Result M | ... | Result 1 | | Result K | | ||||
+----+-----+ .. +----+-----+ +---+------+ .. +----+------+ | ||||
| Id |Value| | Id |Value| | Id |Value| | Id | Value| | ||||
+----+-----+ +----+-----+ +----+-----+ +----+------+</artwork> | ||||
</figure> | ||||
</dd> | ||||
</dl> | ||||
</section> | ||||
<section anchor="BIB" toc="default" numbered="true"> | ||||
<name>Block Integrity Block</name> | ||||
<t> | ||||
A BIB is a BP extension block with the following characteristics. | ||||
<t> | </t> | |||
The block-type-specific-data field follows the structure of the | <ul spacing="normal"> | |||
<li> | ||||
The block type code value is as specified in | ||||
<xref target="BlockType" format="default"/>. | ||||
</li> | ||||
<li> | ||||
The block-type-specific data field follows the structure of the | ||||
ASB. | ASB. | |||
</t> | </li> | |||
<li> | ||||
<t> | A security target listed in the Security Targets field <bcp14>MUS | |||
A security target listed in the Security Targets field MUST NOT | T NOT</bcp14> | |||
reference a security block defined in this specification (e.g., | reference a security block defined in this specification (e.g., | |||
a BIB or a BCB). | a BIB or a BCB). | |||
</t> | </li> | |||
<li> | ||||
<t> | The security context <bcp14>MUST</bcp14> utilize an authenticatio | |||
The Security Context MUST utilize an authentication mechanism or | n mechanism or | |||
an error detection mechanism. | an error detection mechanism. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <t> | |||
<t> | ||||
Notes: | Notes: | |||
<list style="symbols"> | </t> | |||
<t> | <ul spacing="normal"> | |||
Designers SHOULD carefully consider the effect of setting flags t | <li> | |||
hat either discard the | Designers <bcp14>SHOULD</bcp14> carefully consider the effect of | |||
setting flags that either discard the | ||||
block or delete the bundle in the event that this block cannot | block or delete the bundle in the event that this block cannot | |||
be processed. | be processed. | |||
</t> | </li> | |||
<li> | ||||
<t> | ||||
Since OP(bib-integrity, target) is allowed only once in a bundle | Since OP(bib-integrity, target) is allowed only once in a bundle | |||
per target, it is RECOMMENDED that users wishing to support | per target, it is <bcp14>RECOMMENDED</bcp14> that users wishing t | |||
multiple integrity mechanisms for the same target define a | o support | |||
multiple integrity-protection mechanisms for the same target defi | ||||
ne a | ||||
multi-result security context. Such a context could generate | multi-result security context. Such a context could generate | |||
multiple security results for the same security target using diff erent | multiple security results for the same security target using diff erent | |||
integrity-protection mechanisms or different configurations for t he | integrity-protection mechanisms or different configurations for t he | |||
same integrity-protection mechanism. | same integrity-protection mechanism. | |||
</t> | </li> | |||
<li> | ||||
<t> | A BIB is used to verify the plaintext integrity of its security | |||
A BIB is used to verify the plain text integrity of its security | target. However, a single BIB <bcp14>MAY</bcp14> include security | |||
target. However, a single BIB MAY include security results for | results for | |||
blocks other than its security target when doing so establishes a | blocks other than its security target when doing so establishes a | |||
needed relationship between the BIB security target and other blo cks | needed relationship between the BIB security target and other blo cks | |||
in the bundle (such as the primary block). | in the bundle (such as the primary block). | |||
</t> | </li> | |||
<li> | ||||
<t> | Security information <bcp14>MAY</bcp14> be checked at any hop on | |||
Security information MAY be checked at any hop on the | the | |||
way to the bundle destination that has access to the required key ing | way to the bundle destination that has access to the required key ing | |||
information, in accordance with <xref target="interact"/>. | information, in accordance with <xref target="interact" format="d | |||
</t> | efault"/>. | |||
</li> | ||||
</list> | </ul> | |||
</t> | </section> | |||
</section> | <section anchor="BCB" toc="default" numbered="true"> | |||
<name>Block Confidentiality Block</name> | ||||
<section anchor="BCB" title="Block Confidentiality Block" toc="default"> | <t> | |||
<t> | A BCB is a BP extension block with the following characteristics. | |||
A BCB is a bundle extension block with the following characteristics. | ||||
<list> | ||||
<t> | ||||
The Block Type Code value is as specified in | ||||
<xref target="BlockType"/>. | ||||
</t> | ||||
<t> | ||||
The Block Processing Control flags value can be set to whatever | ||||
values are required by local policy with the following exceptions | ||||
. | ||||
BCB blocks MUST have the "block must be replicated in every fragm | ||||
ent" flag set if | ||||
one of the targets is the payload block. Having that BCB in each | ||||
fragment | ||||
indicates to a receiving node that the payload portion of each | ||||
fragment represents cipher text. BCB blocks MUST NOT have the "bl | ||||
ock must | ||||
be removed from bundle if it can't be processed" flag set. Removi | ||||
ng a BCB from | ||||
a bundle without decrypting its security targets removes informat | ||||
ion from | ||||
the bundle necessary for their later decryption. | ||||
</t> | ||||
<t> | </t> | |||
The block-type-specific-data fields follow the structure of the | <ul spacing="normal"> | |||
<li> | ||||
The block type code value is as specified in | ||||
<xref target="BlockType" format="default"/>. | ||||
</li> | ||||
<li><t> | ||||
The block processing control flags value can be set to | ||||
whatever values are required by local policy with the | ||||
following exceptions: </t> | ||||
<ul> | ||||
<li> | ||||
BCBs <bcp14>MUST</bcp14> | ||||
have the "Block must be replicated in every fragment" | ||||
flag set if one of the targets is the payload | ||||
block. Having that BCB in each fragment indicates to a | ||||
receiving node that the payload portion of each | ||||
fragment represents ciphertext. </li> | ||||
<li> | ||||
BCBs <bcp14>MUST | ||||
NOT</bcp14> have the "Block must be removed from bundle | ||||
if it can't be processed" flag set. Removing a BCB from | ||||
a bundle without decrypting its security targets | ||||
removes information from the bundle necessary for their | ||||
later decryption. | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li> | ||||
The block-type-specific data fields follow the structure of the | ||||
ASB. | ASB. | |||
</t> | </li> | |||
<li> | ||||
<t> | A security target listed in the Security Targets field | |||
A security target listed in the Security Targets field can | can reference the payload block, a non-security | |||
reference the payload block, a non-security extension block, | extension block, or a BIB. A BCB <bcp14>MUST | |||
or a BIB. A BCB MUST NOT include another BCB as a security | NOT</bcp14> include another BCB as a security target. A | |||
target. A BCB MUST NOT target the primary block. A BCB MUST | BCB <bcp14>MUST NOT</bcp14> target the primary block. A | |||
NOT target a BIB block unless it shares a security target | BCB <bcp14>MUST NOT</bcp14> target a BIB unless | |||
with that BIB block. | it shares a security target with that BIB. | |||
</t> | </li> | |||
<li> | ||||
<t> | Any security context used by a BCB <bcp14>MUST</bcp14> utilize a | |||
Any Security Context used by a BCB MUST utilize a confidentiality | confidentiality | |||
cipher that provides authenticated encryption with | cipher that provides authenticated encryption with | |||
associated data (AEAD). | associated data (AEAD). | |||
</t> | </li> | |||
<li> | ||||
<t> | ||||
Additional information created by a cipher suite (such as | Additional information created by a cipher suite (such as | |||
an authentication tag) can be placed either in a | an authentication tag) can be placed either in a | |||
security result field or in the generated cipher text. The | security result field or in the generated ciphertext. The | |||
determination of where to place this information is a function of the | determination of where to place this information is a function of the | |||
cipher suite and security context used. | cipher suite and security context used. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <t> | |||
<t> | ||||
The BCB modifies the contents of its security target(s). When a BCB | The BCB modifies the contents of its security target(s). When a BCB | |||
is applied, the security target body data are encrypted "in-place". | is applied, the security target body data are encrypted "in-place". | |||
Following encryption, the security target block-type-specific-data | Following encryption, the security target block-type-specific data | |||
field contains cipher text, not plain text. | field contains ciphertext, not plaintext. | |||
</t> | </t> | |||
<t>Notes: | ||||
<t>Notes: | </t> | |||
<list style="symbols"> | <ul spacing="normal"> | |||
<t> | <li> | |||
It is RECOMMENDED that designers carefully | It is <bcp14>RECOMMENDED</bcp14> that designers carefully | |||
consider the effect of setting flags that delete the bundle in | consider the effect of setting flags that delete the bundle in | |||
the event that this block cannot be processed. | the event that this block cannot be processed. | |||
</t> | </li> | |||
<t> | <li> | |||
The BCB block processing control flags can be set independently | The BCB block processing control flags can be set independently | |||
from the processing control flags of the security target(s). The | from the processing control flags of the security target(s). The | |||
setting of such flags should be an implementation/policy | setting of such flags should be an implementation/policy | |||
decision for the encrypting node. | decision for the encrypting node. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | </section> | |||
</section> | <section anchor="interact" toc="default" numbered="true"> | |||
<name>Block Interactions</name> | ||||
<section anchor="interact" title="Block Interactions" toc="default"> | <t> | |||
<t> | ||||
The security block types defined in this specification are | The security block types defined in this specification are | |||
designed to be as independent as possible. However, there are some | designed to be as independent as possible. | |||
cases where security blocks may share a security target creating | However, there are some cases where security blocks may share a | |||
processing dependencies. | security target; this sharing creates processing dependencies. | |||
</t> | </t> | |||
<t> | ||||
<t> | If a BCB and a BIB share a security target, an undesirable | |||
If a security target of a BCB is also a security target of a BIB, | condition occurs: a waypoint would be unable to validate the BIB | |||
an undesirable condition occurs where a waypoint would | because the shared security target has been encrypted by the BCB. | |||
be unable to validate the BIB because one of its security target's | To address this situation, the | |||
contents have been encrypted by a BCB. To address this situation the | following processing rules <bcp14>MUST</bcp14> be followed: | |||
following processing rules MUST be followed. | </t> | |||
</t> | <ul spacing="normal"> | |||
<li> | ||||
<t> | When adding a BCB to a bundle, if some (or all) of the | |||
<list style="symbols"> | security targets of the BCB match all of the | |||
<t> | security targets of an existing BIB, then the existing | |||
When adding a BCB to a bundle, if some (or all) of the security | BIB <bcp14>MUST</bcp14> also be encrypted. This can be | |||
targets of the BCB also match all of the security targets of | accomplished either by adding a new BCB that targets | |||
an existing BIB, then the existing BIB MUST also be encrypted. | the existing BIB or by adding the BIB to the list of | |||
This can be accomplished by either adding a new BCB that | security targets for the BCB. Deciding which way to | |||
targets the existing BIB, or by adding the BIB to | represent this situation is a matter of security | |||
the list of security targets for the BCB. Deciding which way | policy. | |||
to represent this situation is a matter of security policy. | </li> | |||
</t> | <li> | |||
<t> | When adding a BCB to a bundle, if some (or all) of the | |||
When adding a BCB to a bundle, if some (or all) of the security | security targets of the BCB match some (but not all) of | |||
targets of the BCB match some (but not all) of the security | the security targets of a BIB, then that BIB | |||
targets of a BIB then that BIB MUST be altered in the following | <bcp14>MUST</bcp14> be altered in the following | |||
way. Any security results in the BIB associated with the BCB | way. Any security results in the BIB associated with | |||
security targets MUST be removed from the BIB and placed in | the BCB security targets <bcp14>MUST</bcp14> be removed | |||
a new BIB. This newly created BIB MUST then be encrypted. | from the BIB and placed in a new BIB. This newly | |||
The encryption of the new BIB can be accomplished by | created BIB <bcp14>MUST</bcp14> then be encrypted. The | |||
either adding a new BCB that targets the new BIB, or by | encryption of the new BIB can be accomplished either by | |||
adding the new BIB to the list of security targets for the BCB. | adding a new BCB that targets the new BIB or by adding | |||
Deciding which way to represent this situation is a matter of | the new BIB to the list of security targets for the | |||
security policy. | BCB. Deciding which way to represent this situation is | |||
</t> | a matter of security policy. | |||
</li> | ||||
<t> | <li> | |||
A BIB MUST NOT be added for a security target that is already | A BIB <bcp14>MUST NOT</bcp14> be added for a security | |||
the security target of a BCB as this would cause | target that is already the security target of a BCB as | |||
ambiguity in block processing order. | this would cause ambiguity in block processing order. | |||
</t> | </li> | |||
<li> | ||||
<t> | A BIB integrity value <bcp14>MUST NOT</bcp14> be | |||
A BIB integrity value MUST NOT be checked if the BIB is the | checked if the BIB is the security target of an | |||
security target of an existing BCB. In this case, the BIB | existing BCB. In this case, the BIB data is encrypted. | |||
data is encrypted. | </li> | |||
</t> | <li> | |||
<t> | A BIB integrity value <bcp14>MUST NOT</bcp14> be | |||
A BIB integrity value MUST NOT be checked if the security | checked if the security target associated with that | |||
target associated with that value is also the security target of | value is also the security target of a BCB. In such a | |||
a BCB. In such | case, the security target data contains ciphertext as | |||
a case, the security target data contains cipher text as it has | it has been encrypted. | |||
been encrypted. | </li> | |||
</t> | <li> | |||
<t> | As mentioned in <xref target="BIB" format="default"/>, | |||
As mentioned in <xref target="BIB"/>, a BIB MUST NOT have a | a BIB <bcp14>MUST NOT</bcp14> have a BCB as its | |||
BCB as its security target. | security target. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <t> | |||
These restrictions on block interactions impose a necessary | ||||
<t> | ordering when applying security operations within a | |||
These restrictions on block interactions impose a necessary ordering | bundle. Specifically, for a given security target, BIBs | |||
when applying security operations within a bundle. Specifically, for | <bcp14>MUST</bcp14> be added before BCBs. This ordering | |||
a given security target, BIBs MUST be added before BCBs. This | <bcp14>MUST</bcp14> be preserved in cases where the current | |||
ordering MUST be preserved in cases where the current BPA is adding | BPA is adding all of the security blocks for the bundle or | |||
all of the security blocks for the bundle or whether the BPA is a | where the BPA is a waypoint adding new security blocks to a | |||
waypoint adding new security blocks to a bundle that already contains | bundle that already contains security blocks. | |||
security blocks. | </t> | |||
</t> | <t> | |||
<t> | In cases where a security source wishes to calculate both a | |||
In cases where a security source wishes to | plaintext integrity-protection mechanism and encrypt a security target, | |||
calculate both a plain text integrity mechanism and encrypt a | a BCB with a security context that generates an | |||
security target, a BCB with a security context that generates an integr | integrity-protection mechanism as one or more additional | |||
ity-protection mechanism | security results <bcp14>MUST</bcp14> be used instead of | |||
as one or more additional security results MUST be used instead of | adding both a BIB and then a BCB for the security target at | |||
adding both a BIB and then a BCB for the security target at the | the security source. | |||
security source. | </t> | |||
</t> | </section> | |||
</section> | <section anchor="parmresult" numbered="true" toc="default"> | |||
<name>Parameter and Result Identification</name> | ||||
<section anchor="parmresult" title="Parameter and Result Identification"> | <t> | |||
<t> | Each security context <bcp14>MUST</bcp14> define its own | |||
Each security context MUST define its own context parameters and result | context parameters and results. Each defined parameter and | |||
s. | result is represented as the tuple of an identifier and a | |||
Each defined parameter and result is represented as the tuple of an | value. Identifiers are always represented as a CBOR unsigned | |||
identifier and a value. Identifiers are always represented as a CBOR | integer. The CBOR encoding of values is as defined by the | |||
unsigned integer. The CBOR encoding of values is as defined by the | ||||
security context specification. | security context specification. | |||
</t> | </t> | |||
<t> | <t> | |||
Identifiers MUST be unique for a given security context but do not need | Identifiers <bcp14>MUST</bcp14> be unique for a given | |||
to be unique amongst all security contexts. | security context but do not need to be unique amongst all | |||
</t> | security contexts. | |||
<t> | </t> | |||
An example of a security context can be found at <xref target="I-D.ietf | <t> | |||
-dtn-bpsec-default-sc"/>. | An example of a security context can be found in <xref | |||
</t> | target="RFC9173" format="default"/>. | |||
</section> | </t> | |||
</section> | ||||
<section anchor="bsp_example" title="BSP Block Examples" toc="default"> | <section anchor="bsp_example" toc="default" numbered="true"> | |||
<t> | <name>BPSec Block Examples</name> | |||
<t> | ||||
This section provides two examples of BPSec blocks applied to | This section provides two examples of BPSec blocks applied to | |||
a bundle. In the first example, a single node adds several | bundles. In the first example, a single node adds several | |||
security operations to a bundle. In the second example, a waypoint | security operations to a bundle. In the second example, a | |||
node received the bundle created in the first example and adds | waypoint node received the bundle created in the first | |||
additional security operations. In both examples, the first column | example and adds additional security operations. In both | |||
represents blocks within a bundle and the second column represents | examples, the first column represents blocks within a bundle | |||
the Block Number for the block, using the terminology B1...Bn for the | and the second column represents the block number for the | |||
purpose of illustration. | block, using the terminology B1...Bn for the purpose of | |||
</t> | illustration. | |||
</t> | ||||
<section title="Example 1: Constructing a Bundle with Security"> | <section numbered="true" toc="default"> | |||
<t> | <name>Example 1: Constructing a Bundle with Security</name> | |||
In this example a bundle has four non-security-related blocks: the | <t> | |||
primary block (B1), two extension blocks (B4,B5), and a payload | In this example, a bundle has four non-security-related | |||
block (B6). The bundle source wishes to provide an integrity | blocks: the primary block (B1), two extension blocks | |||
signature of the plain text associated with the primary block, the | (B4, B5), and a payload block (B6). The bundle source | |||
second extension block, and the payload. The bundle source also | wishes to provide an integrity signature of the plaintext | |||
wishes to provide confidentiality for the first extension block. | associated with the primary block, the second extension | |||
The resultant bundle is illustrated in <xref target="bsp_ex1"/> and | block, and the payload. The bundle source also wishes to | |||
the security actions are described below. | provide confidentiality for the first extension block. | |||
The resultant bundle is illustrated in <xref | ||||
<figure anchor="bsp_ex1" title="Security at Bundle Creation"> | target="bsp_ex1" format="default"/> and the security | |||
<artwork align="center">
<!-- | actions are described below. | |||
--> Block in Bundle ID
<!-- | </t> | |||
-->+==========================================+====+
<!-- | <figure anchor="bsp_ex1"> | |||
-->| Primary Block | B1 |
<!-- | <name>Security at Bundle Creation</name> | |||
-->+------------------------------------------+----+
<!-- | <artwork align="center" name="" type="" alt=""> | |||
-->| BIB | B2 |
<!-- | Block in Bundle ID | |||
-->| OP(bib-integrity, targets=B1, B5, B6) | |
<!-- | +==========================================+====+ | |||
-->+------------------------------------------+----+
<!-- | | Primary Block | B1 | | |||
-->| BCB | B3 |
<!-- | +------------------------------------------+----+ | |||
-->| OP(bcb-confidentiality, target=B4) | |
<!-- | | BIB | B2 | | |||
-->+------------------------------------------+----+
<!-- | | OP(bib-integrity, targets = B1, B5, B6)| | | |||
-->| Extension Block (encrypted) | B4 |
<!-- | +------------------------------------------+----+ | |||
-->+------------------------------------------+----+
<!-- | | BCB | B3 | | |||
-->| Extension Block | B5 |
<!-- | | OP(bcb-confidentiality, target = B4) | | | |||
-->+------------------------------------------+----+
<!-- | +------------------------------------------+----+ | |||
-->| Payload Block | B6 |
<!-- | | Extension Block (encrypted) | B4 | | |||
-->+------------------------------------------+----+ | +------------------------------------------+----+ | |||
</artwork> | | Extension Block | B5 | | |||
</figure> | +------------------------------------------+----+ | |||
</t> | | Payload Block | B6 | | |||
<t> | +------------------------------------------+----+</artwork> | |||
</figure> | ||||
<t> | ||||
The following security actions were applied to this bundle at its | The following security actions were applied to this bundle at its | |||
time of creation. | time of creation. | |||
<list style="symbols"> | </t> | |||
<ul spacing="normal"> | ||||
<t> | <li> | |||
An integrity signature applied to the canonical form of the | An integrity signature applied to the canonical form of the | |||
primary block (B1), the canonical form of the block-type-speci | primary block (B1), the canonical form of the block-type-speci | |||
fic-data field | fic data field | |||
of the second extension block (B5) and the canonical form of t | of the second extension block (B5), and the canonical form of | |||
he | the | |||
payload block (B6). This is accomplished by a single BIB (B2) | payload block (B6). This is accomplished by a single BIB (B2) | |||
with multiple targets. A single BIB is used in this case | with multiple targets. A single BIB is used in this case | |||
because all three targets share a security source, security | because all three targets share a security source, security | |||
context, and security context parameters. Had this not been | context, and security context parameters. Had this not been | |||
the case, multiple BIBs could have been added instead. | the case, multiple BIBs could have been added instead. | |||
</t> | </li> | |||
<li> | ||||
<t> | ||||
Confidentiality for the first extension block (B4). This is | Confidentiality for the first extension block (B4). This is | |||
accomplished by a BCB (B3). Once applied, the block-type-speci | accomplished by a BCB (B3). Once applied, the block-type-speci | |||
fic-data | fic data | |||
field of extension block B4 is encrypted. The BCB MUST | field of extension block B4 is encrypted. The BCB <bcp14>MUST< | |||
hold an authentication tag for the cipher text either | /bcp14> | |||
in the cipher text that now populates the first extension | hold an authentication tag for the ciphertext either | |||
in the ciphertext that now populates the first extension | ||||
block or as a security result in the BCB itself, depending | block or as a security result in the BCB itself, depending | |||
on which security context is used to form the BCB. A plain tex t | on which security context is used to form the BCB. A plaintext | |||
integrity signature may also exist as a security result in | integrity signature may also exist as a security result in | |||
the BCB if one is provided by the selected confidentiality | the BCB if one is provided by the selected confidentiality | |||
security context. | security context. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | </section> | |||
</section> | <section numbered="true" toc="default"> | |||
<name>Example 2: Adding More Security at a New Node</name> | ||||
<section title="Example 2: Adding More Security At A New Node"> | <t> | |||
<t> | Consider that the bundle as it is illustrated in <xref | |||
Consider that the bundle as it is illustrated in | target="bsp_ex1" format="default"/> is now received by a | |||
<xref target="bsp_ex1"/> is now received by a waypoint node that | waypoint node that wishes to encrypt the second extension | |||
wishes to encrypt the second extension block and the bundle payload. | block and the bundle payload. The waypoint security | |||
The waypoint security policy is to allow existing BIBs for these | policy is to allow existing BIBs for these blocks to | |||
blocks to persist, as they may be required as part of the security | persist, as they may be required as part of the security | |||
policy at the bundle destination. | policy at the bundle destination. | |||
</t> | </t> | |||
<t> | <t> | |||
The resultant bundle is illustrated in <xref target="bsp_ex2"/> | The resultant bundle is illustrated in <xref target="bsp_ex2" format | |||
="default"/> | ||||
and the security actions are described below. Note that block IDs | and the security actions are described below. Note that block IDs | |||
provided here are ordered solely for the purpose of this example | provided here are ordered solely for the purpose of this example | |||
and not meant to impose an ordering for block creation. The | and are not meant to impose an ordering for block creation. The | |||
ordering of blocks added to a bundle MUST always be in compliance | ordering of blocks added to a bundle <bcp14>MUST</bcp14> always be i | |||
with <xref target="I-D.ietf-dtn-bpbis"/>. | n compliance | |||
with <xref target="RFC9171" format="default"/>. | ||||
<figure anchor="bsp_ex2" title="Security At Bundle Forwarding"> | </t> | |||
<artwork align="center">
<!-- | <figure anchor="bsp_ex2"> | |||
--> Block in Bundle ID
<!-- | <name>Security at Bundle Forwarding</name> | |||
-->+==========================================+====+
<!-- | <artwork align="center" name="" type="" alt=""> | |||
-->| Primary Block | B1 |
<!-- | Block in Bundle ID | |||
-->+------------------------------------------+----+
<!-- | +==========================================+====+ | |||
-->| BIB | B2 |
<!-- | | Primary Block | B1 | | |||
-->| OP(bib-integrity, targets=B1) | |
<!-- | +------------------------------------------+----+ | |||
-->+------------------------------------------+----+
<!-- | | BIB | B2 | | |||
-->| BIB (encrypted) | B7 |
<!-- | | OP(bib-integrity, target = B1) | | | |||
-->| OP(bib-integrity, targets=B5, B6) | |
<!-- | +------------------------------------------+----+ | |||
-->+------------------------------------------+----+
<!-- | | BIB (encrypted) | B7 | | |||
-->| BCB | B8 |
<!-- | | OP(bib-integrity, targets = B5, B6) | | | |||
-->| OP(bcb-confidentiality,targets=B5,B6,B7) | |
<!-- | +------------------------------------------+----+ | |||
-->+------------------------------------------+----+
<!-- | | BCB | B8 | | |||
-->| BCB | B3 |
<!-- | |OP(bcb-confidentiality,targets = B5,B6,B7)| | | |||
-->| OP(bcb-confidentiality, target=B4) | |
<!-- | +------------------------------------------+----+ | |||
-->+------------------------------------------+----+
<!-- | | BCB | B3 | | |||
-->| Extension Block (encrypted) | B4 |
<!-- | | OP(bcb-confidentiality, target = B4) | | | |||
-->+------------------------------------------+----+
<!-- | +------------------------------------------+----+ | |||
-->| Extension Block (encrypted) | B5 |
<!-- | | Extension Block (encrypted) | B4 | | |||
-->+------------------------------------------+----+
<!-- | +------------------------------------------+----+ | |||
-->| Payload Block (encrypted) | B6 |
<!-- | | Extension Block (encrypted) | B5 | | |||
-->+------------------------------------------+----+ | +------------------------------------------+----+ | |||
</artwork> | | Payload Block (encrypted) | B6 | | |||
</figure> | +------------------------------------------+----+</artwork> | |||
</t> | </figure> | |||
<t> | <t> | |||
The following security actions were applied to this bundle prior to | The following security actions were applied to this bundle prior to | |||
its forwarding from the waypoint node. | its forwarding from the waypoint node. | |||
<list style="symbols"> | </t> | |||
<t> | <ul spacing="normal"> | |||
<li> | ||||
Since the waypoint node wishes to encrypt the | Since the waypoint node wishes to encrypt the | |||
block-type-specific-data field of blocks B5 and B6, | block-type-specific data field of blocks B5 and B6, | |||
it MUST also encrypt the block-type-specific-data field of | it <bcp14>MUST</bcp14> also encrypt the block-type-specific da | |||
the BIBs providing plain text integrity | ta field of | |||
the BIBs providing plaintext integrity | ||||
over those blocks. However, BIB B2 could not be encrypted | over those blocks. However, BIB B2 could not be encrypted | |||
in its entirety because it also held a signature for the | in its entirety because it also held a signature for the | |||
primary block (B1). Therefore, a new BIB (B7) is created and | primary block (B1). Therefore, a new BIB (B7) is created and | |||
security results associated with B5 and B6 are moved out | security results associated with B5 and B6 are moved out | |||
of BIB B2 and into BIB B7. | of BIB B2 and into BIB B7. | |||
</t> | </li> | |||
<t> | <li> | |||
Now that there is no longer confusion of which plain text | Now that there is no longer confusion about which plaintext | |||
integrity signatures must be encrypted, a BCB is added to the | integrity signatures must be encrypted, a BCB is added to the | |||
bundle with the security targets being the second extension | bundle with the security targets being the second extension | |||
block (B5) and the payload (B6) as well as the newly created | block (B5) and the payload (B6) as well as the newly created | |||
BIB holding their plain text integrity signatures (B7). A | BIB holding their plaintext integrity signatures (B7). A | |||
single new BCB is used in this case because all three | single new BCB is used in this case because all three | |||
targets share a security source, security context, and | targets share a security source, security context, and | |||
security context parameters. Had this not been the case, | security context parameters. Had this not been the case, | |||
multiple BCBs could have been added instead. | multiple BCBs could have been added instead. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="CanonBundle" toc="default" numbered="true"> | ||||
</section> | <name>Canonical Forms</name> | |||
<t> | ||||
<section anchor="CanonBundle" title="Canonical Forms" toc="default"> | ||||
<t> | ||||
Security services require consistency and determinism in how information | Security services require consistency and determinism in how information | |||
is presented to cipher suites at security sources, verifiers, and acceptor s. | is presented to cipher suites at security sources, verifiers, and acceptor s. | |||
For example, integrity services require that the same target | For example, integrity services require that the same target | |||
information (e.g., the same bits in the same order) is provided to the | information (e.g., the same bits in the same order) is provided to the | |||
cipher suite when generating an original signature and when validating a | cipher suite when generating an original signature and when validating a | |||
signature. Canonicalization algorithms transcode the contents of a securit y | signature. Canonicalization algorithms transcode the contents of a securit y | |||
target into a canonical form. | target into a canonical form. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
Canonical forms are used to generate input to a security context for | Canonical forms are used to generate input to a security context for | |||
security processing at a BP node. If the values of a security target are | security processing at a BP node. If the values of a security target are | |||
unchanged, then the canonical form of that target will be the same even | unchanged, then the canonical form of that target will be the same even | |||
if the encoding of those values for wire transmission is different. | if the encoding of those values for wire transmission is different. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
BPSec operates on data fields within bundle blocks | BPSec operates on data fields within bundle blocks | |||
(e.g., the block-type-specific-data field). In their canonical form, these | (e.g., the block-type-specific data field). In their canonical form, these | |||
fields MUST include their own CBOR encoding and MUST NOT include any | fields <bcp14>MUST</bcp14> include their own CBOR encoding and <bcp14>MUST | |||
NOT</bcp14> include any | ||||
other encapsulating CBOR encoding. | other encapsulating CBOR encoding. | |||
For example, the canonical form of the block-type-specific-data field | For example, the canonical form of the block-type-specific data field | |||
is a CBOR byte string existing within the CBOR array containing the fields of | is a CBOR byte string existing within the CBOR array containing the fields of | |||
the extension block. The entire CBOR byte string is considered the canonic al | the extension block. The entire CBOR byte string is considered the canonic al | |||
block-type-specific-data field. The CBOR array | block-type-specific data field. The CBOR array | |||
framing is not considered part of the field. | framing is not considered part of the field. | |||
</t> | </t> | |||
<t> | ||||
<t> | The canonical form of the primary block is as specified in <xref target="R | |||
The canonical form of the primary block is as specified in <xref target="I | FC9171" format="default"/> with | |||
-D.ietf-dtn-bpbis"/> with | ||||
the following constraint. | the following constraint. | |||
<list style="symbols"> | </t> | |||
<t> | <ul spacing="normal"> | |||
CBOR values from the primary block MUST be canonicalized using the r | <li> | |||
ules for Deterministically Encoded CBOR, | CBOR values from the primary block <bcp14>MUST</bcp14> be canonicali | |||
as specified in <xref target="RFC8949"/>. | zed using the rules for Deterministically Encoded CBOR, | |||
</t> | as specified in <xref target="RFC8949" format="default"/>. | |||
</list> | </li> | |||
</t> | </ul> | |||
<t> | ||||
<t> | ||||
All non-primary blocks share the same block structure and are | All non-primary blocks share the same block structure and are | |||
canonicalized as specified in <xref target="I-D.ietf-dtn-bpbis"/> with | canonicalized as specified in <xref target="RFC9171" format="default"/> wi th | |||
the following constraints. | the following constraints. | |||
<list style="symbols"> | </t> | |||
<t> | <ul spacing="normal"> | |||
CBOR values from the non-primary block MUST be canonicalized using t | <li> | |||
he rules for Deterministically Encoded CBOR, | CBOR values from the non-primary block <bcp14>MUST</bcp14> be canoni | |||
as specified in <xref target="RFC8949"/>. | calized using the rules for Deterministically Encoded CBOR, | |||
</t> | as specified in <xref target="RFC8949" format="default"/>. | |||
<t> | </li> | |||
Only the block-type-specific-data field may be provided to a cipher | <li> | |||
suite for | Only the block-type-specific data field may be provided to a cipher | |||
encryption as part of a confidentiality security service. Other fiel | suite for | |||
ds within a non-primary-block | encryption as part of a confidentiality security service. Other fiel | |||
MUST NOT be encrypted or decrypted and MUST NOT be included in the c | ds within a non-primary block | |||
anonical form used by the | <bcp14>MUST NOT</bcp14> be encrypted or decrypted and <bcp14>MUST NO | |||
cipher suite for encryption and decryption. These other fields MAY h | T</bcp14> be included in the canonical form used by the | |||
ave an integrity protection | cipher suite for encryption and decryption. | |||
mechanism applied to them by treating them as associated authenticat | An integrity-protection mechanism <bcp14>MAY</bcp14> be applied to these o | |||
ed data. | ther | |||
</t> | fields as supported by the security context. For example, these | |||
<t> | fields might be treated as associated authenticated data. | |||
Reserved and unassigned flags in the block processing control flags | </li> | |||
field MUST be set to 0 in | <li> | |||
Reserved and unassigned flags in the block processing control flags | ||||
field <bcp14>MUST</bcp14> be set to 0 in | ||||
a canonical form as it is not known if those flags will change in tr ansit. | a canonical form as it is not known if those flags will change in tr ansit. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <t> | |||
Security contexts <bcp14>MAY</bcp14> define their own canonicalization alg | ||||
<t> | orithms and require the use of those algorithms | |||
Security contexts MAY define their own canonicalization algorithms and req | ||||
uire the use of those algorithms | ||||
over the ones provided in this specification. In the event of conflicting canonicalization algorithms, algorithms | over the ones provided in this specification. In the event of conflicting canonicalization algorithms, algorithms | |||
defined in a security context take precedence over this specification when constructing canonical forms for that | defined in a security context take precedence over this specification when constructing canonical forms for that | |||
security context. | security context. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="SecProc" toc="default" numbered="true"> | ||||
<section anchor="SecProc" title="Security Processing" toc="default"> | <name>Security Processing</name> | |||
<t> | ||||
This section describes the security aspects of bundle processing. | ||||
</t> | ||||
<section anchor="BundleRX" title="Bundles Received from Other Nodes"> | ||||
<t> | <t> | |||
This section describes the security aspects of bundle processing. | ||||
</t> | ||||
<section anchor="BundleRX" numbered="true" toc="default"> | ||||
<name>Bundles Received from Other Nodes</name> | ||||
<t> | ||||
Security blocks must be processed in a specific order when received | Security blocks must be processed in a specific order when received | |||
by a BP node. The processing order is as follows. | by a BP node. The processing order is as follows. | |||
<list style="symbols"> | </t> | |||
<t> | <ul spacing="normal"> | |||
When BIBs and BCBs share a security target, BCBs MUST be | <li> | |||
When BIBs and BCBs share a security target, BCBs <bcp14>MUST</bcp | ||||
14> be | ||||
evaluated first and BIBs second. | evaluated first and BIBs second. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <section toc="default" numbered="true"> | |||
<name>Receiving BCBs</name> | ||||
<section title="Receiving BCBs" toc="default"> | <t> | |||
<t> | If a received bundle contains a BCB, the receiving node <bcp14>MUST< | |||
If a received bundle contains a BCB, the receiving node MUST | /bcp14> | |||
determine whether it is the security acceptor for any of | determine whether it is the security acceptor for any of | |||
the security operations in the BCB. If so, the node MUST | the security operations in the BCB. If so, the node <bcp14>MUST</bcp 14> | |||
process those operations and remove any operation-specific | process those operations and remove any operation-specific | |||
information from the BCB prior to delivering data to an application at the node | information from the BCB prior to delivering data to an application at the node | |||
or forwarding the bundle. If processing a security operation fails, | or forwarding the bundle. If processing a security operation fails, | |||
the target SHALL be processed according to the security policy. | the target <bcp14>SHALL</bcp14> be processed according to the securi | |||
A bundle status report indicating the failure MAY be generated. | ty policy. | |||
A bundle status report indicating the failure <bcp14>MAY</bcp14> be | ||||
generated. | ||||
When all security operations for a BCB have been removed from | When all security operations for a BCB have been removed from | |||
the BCB, the BCB MUST be removed from the bundle. | the BCB, the BCB <bcp14>MUST</bcp14> be removed from the bundle. | |||
</t> | </t> | |||
<t> | ||||
<t> | If the receiving node is the destination of the bundle, | |||
If the receiving node is the destination of the bundle, the node | the node <bcp14>MUST</bcp14> decrypt any BCBs remaining in | |||
MUST decrypt any BCBs remaining in the bundle. If the receiving | the bundle. If the receiving node is not the destination | |||
node is not the destination of the bundle, the node MUST process | of the bundle, the node <bcp14>MUST</bcp14> process the | |||
the BCB if directed to do so as a matter of security policy. | BCB if directed to do so as a matter of security policy. | |||
</t> | </t> | |||
<t> | ||||
<t> | If the security policy of a node specifies that a node | |||
If the security policy of a node specifies that a | should have applied confidentiality to a specific security | |||
node should have applied confidentiality to a specific security | target and no such BCB is present in the bundle, then the | |||
target and no such BCB is present in the bundle, then the node | node <bcp14>MUST</bcp14> process this security target in | |||
MUST process this security target in accordance with the security | accordance with the security policy. It is | |||
policy. It is RECOMMENDED that the node remove the security target | <bcp14>RECOMMENDED</bcp14> that the node remove the | |||
from the bundle because the confidentiality (and possibly the integr | security target from the bundle because the | |||
ity) | confidentiality (and possibly the integrity) of the | |||
of the security target cannot be guaranteed. If the removed security | security target cannot be guaranteed. If the removed | |||
target | security target is the payload block, the bundle | |||
is the payload block, the bundle MUST be discarded. | <bcp14>MUST</bcp14> be discarded. | |||
</t> | </t> | |||
<t> | ||||
<t> | If an encrypted payload block cannot be decrypted (i.e., | |||
If an encrypted payload block cannot be decrypted (i.e., the | the ciphertext cannot be authenticated), then the bundle | |||
cipher text cannot be authenticated), then the bundle MUST be | <bcp14>MUST</bcp14> be discarded and processed no | |||
discarded and processed no further. If an encrypted security | further. If an encrypted security target other than the | |||
target other than the payload block cannot be decrypted then the | payload block cannot be decrypted, then the associated | |||
associated security target and all security blocks associated with | security target and all security blocks associated with | |||
that target MUST be discarded and processed no further. In both | that target <bcp14>MUST</bcp14> be discarded and processed | |||
cases, requested status reports (see | no further. In both cases, requested status reports (see | |||
<xref target="I-D.ietf-dtn-bpbis"/>) MAY be generated to reflect | <xref target="RFC9171" format="default"/>) | |||
bundle or block deletion. | <bcp14>MAY</bcp14> be generated to reflect bundle or block | |||
</t> | deletion. | |||
</t> | ||||
<t> | <t> | |||
When a BCB is decrypted, the recovered plain text for each | When a BCB is decrypted, the recovered plaintext for each | |||
security target MUST replace the cipher text in each of the | security target <bcp14>MUST</bcp14> replace the ciphertext in each o | |||
security targets' block-type-specific-data fields. If the | f the | |||
plain text is of different size than the cipher text, the CBOR byte | security targets' block-type-specific data fields. If the | |||
string framing of this field must be updated to ensure this field | plaintext is of a different size than the ciphertext, the framing of | |||
remains a valid CBOR byte string. The length of the recovered plain | the CBOR byte | |||
text is known by the decrypting security context. | string of this field must be updated to ensure this field | |||
</t> | remains a valid CBOR byte string. The length of the recovered plaint | |||
ext | ||||
<t> | is known by the decrypting security context. | |||
</t> | ||||
<t> | ||||
If a BCB contains multiple security operations, each operation proce ssed | If a BCB contains multiple security operations, each operation proce ssed | |||
by the node MUST be treated as if the security operation | by the node <bcp14>MUST</bcp14> be treated as if the security operat ion | |||
has been represented by a single BCB with a single | has been represented by a single BCB with a single | |||
security operation for the purposes of report generation and policy | security operation for the purposes of report generation and policy | |||
processing. | processing. | |||
</t> | </t> | |||
</section> | ||||
</section> | <section toc="default" numbered="true"> | |||
<name>Receiving BIBs</name> | ||||
<section title="Receiving BIBs" toc="default"> | <t> | |||
If a received bundle contains a BIB, the receiving node | ||||
<t> | <bcp14>MUST</bcp14> determine whether it is the security | |||
If a received bundle contains a BIB, the receiving node MUST | acceptor for any of the security operations in the BIB. If | |||
determine whether it is the security acceptor for any of | so, the node <bcp14>MUST</bcp14> process those operations | |||
the security operations in the BIB. If so, the node MUST process | and remove any operation-specific information from the BIB | |||
those operations and remove any operation-specific information | prior to delivering data to an application at the node or | |||
from the BIB prior to delivering data to an application at the node | forwarding the bundle. If processing a security operation | |||
or forwarding the bundle. If processing a security operation fails, | fails, the target <bcp14>SHALL</bcp14> be processed | |||
the target SHALL be processed according to the security policy. A | according to the security policy. A bundle status report | |||
bundle status report indicating the failure MAY be generated. When | indicating the failure <bcp14>MAY</bcp14> be | |||
all security operations for a BIB have been removed from the BIB, | generated. When all security operations for a BIB have | |||
the BIB MUST be removed from the bundle. | been removed from the BIB, the BIB <bcp14>MUST</bcp14> be | |||
</t> | removed from the bundle. | |||
</t> | ||||
<t> | <t> | |||
A BIB MUST NOT be processed if the security target of the BIB is | A BIB <bcp14>MUST NOT</bcp14> be processed if the security | |||
also the security target of a BCB in the bundle. Given the order of | target of the BIB is also the security target of a BCB in | |||
operations mandated by this specification, when both a BIB and a | the bundle. Given the order of operations mandated by this | |||
BCB share a security target, it means that the security target | specification, when both a BIB and a BCB share a security | |||
must have been encrypted after it was integrity signed and, | target, it means that the security target must have been | |||
therefore, the BIB cannot be verified until the security target | encrypted after it was integrity signed; therefore, the | |||
has been decrypted by processing the BCB. | BIB cannot be verified until the security target has been | |||
</t> | decrypted by processing the BCB. | |||
</t> | ||||
<t> | <t> | |||
If the security policy of a node specifies that a | If the security policy of a node specifies that a node | |||
node should have applied integrity to a specific security target | should have applied integrity to a specific security | |||
and no such BIB is present in the bundle, then the node MUST | target and no such BIB is present in the bundle, then the | |||
process this security target in accordance with the security | node <bcp14>MUST</bcp14> process this security target in | |||
policy. It is RECOMMENDED that the node remove the security | accordance with the security policy. It is | |||
target from the bundle if the security target is not the | <bcp14>RECOMMENDED</bcp14> that the node remove the | |||
payload or primary block. If the security target is | security target from the bundle if the security target is | |||
the payload or primary block, the bundle MAY be | not the payload or primary block. If the security target | |||
discarded. This action can occur at any node that has the | is the payload or primary block, the bundle | |||
ability to verify an integrity signature, not just the bundle destin | <bcp14>MAY</bcp14> be discarded. This action can occur at | |||
ation. | any node that has the ability to verify an integrity | |||
</t> | signature, not just the bundle destination. | |||
</t> | ||||
<t> | <t> | |||
If a receiving node is not the security acceptor of a security | If a receiving node is not the security acceptor of a | |||
operation in a BIB it MAY attempt to verify the security operation | security operation in a BIB, it <bcp14>MAY</bcp14> attempt | |||
anyway to prevent forwarding corrupt data. If the verification fails | to verify the security operation anyway to prevent | |||
, the | forwarding corrupt data. If the verification fails, the | |||
node SHALL process the security target in accordance to local | node <bcp14>SHALL</bcp14> process the security target in | |||
security policy. It is RECOMMENDED that if a payload integrity | accordance with local security policy. | |||
check fails at a waypoint that it is processed in the same way as | If a payload integrity check fails at a waypoint, it is | |||
if the check fails at the bundle destination. If the check passes, t | <bcp14>RECOMMENDED</bcp14> that it be processed in the | |||
he | same way as a failure of a payload | |||
node MUST NOT remove the security operation from the BIB prior to fo | integrity check at the bundle destination. If | |||
rwarding. | the check passes, the node <bcp14>MUST NOT</bcp14> remove | |||
</t> | the security operation from the BIB prior to forwarding. | |||
</t> | ||||
<t> | <t> | |||
If a BIB contains multiple security operations, each operation proce ssed | If a BIB contains multiple security operations, each operation proce ssed | |||
by the node MUST be treated as if the security operation | by the node <bcp14>MUST</bcp14> be treated as if the security operat ion | |||
has been represented by a single BIB with a single | has been represented by a single BIB with a single | |||
security operation for the purposes of report generation and policy | security operation for the purposes of report generation and policy | |||
processing. | processing. | |||
</t> | </t> | |||
</section> | ||||
</section> | </section> | |||
</section> | <section anchor="FragRe" numbered="true" toc="default"> | |||
<name>Bundle Fragmentation and Reassembly</name> | ||||
<section anchor="FragRe" title="Bundle Fragmentation and Reassembly"> | <t> | |||
<t> | ||||
If it is necessary for a node to fragment a bundle payload, and | If it is necessary for a node to fragment a bundle payload, and | |||
security services have been applied to that bundle, the fragmentation | security services have been applied to that bundle, the fragmentation | |||
rules described in <xref target="I-D.ietf-dtn-bpbis"/> MUST be | rules described in <xref target="RFC9171" format="default"/> <bcp14>MUS T</bcp14> be | |||
followed. As defined there and summarized here for completeness, only | followed. As defined there and summarized here for completeness, only | |||
the payload block can be fragmented; security blocks, like all | the payload block can be fragmented; security blocks, like all | |||
extension blocks, can never be fragmented. | extension blocks, can never be fragmented. | |||
</t> | </t> | |||
<t> | ||||
<t> | Due to the complexity of payload-block fragmentation, including the | |||
Due to the complexity of payload block fragmentation, including the | possibility of fragmenting payload-block fragments, integrity and | |||
possibility of fragmenting payload block fragments, integrity and | ||||
confidentiality operations are not to be applied to a bundle | confidentiality operations are not to be applied to a bundle | |||
representing a fragment. Specifically, a BCB or BIB MUST NOT be | representing a fragment. Specifically, a BCB or BIB <bcp14>MUST NOT</bc | |||
added to a bundle if the "Bundle is a Fragment" flag is set in the | p14> be | |||
Bundle Processing Control Flags field. | added to a bundle if the "Bundle is a fragment" flag is set in the | |||
</t> | bundle processing control flags field. | |||
</t> | ||||
<t> | <t> | |||
Security processing in the presence of payload block fragmentation may | Security processing in the presence of payload-block fragmentation may | |||
be handled by other mechanisms outside of the BPSec protocol or | be handled by other mechanisms outside of the BPSec protocol or | |||
by applying BPSec blocks in coordination with an encapsulation | by applying BPSec blocks in coordination with an encapsulation | |||
mechanism. A node should apply any confidentiality | mechanism. A node should apply any confidentiality | |||
protection prior to performing any fragmentation. | protection prior to performing any fragmentation. | |||
</t> | ||||
</section> | ||||
</section> | ||||
<section anchor="KeyMgmt" toc="default" numbered="true"> | ||||
<name>Key Management</name> | ||||
<t> | ||||
There exists a myriad of ways to establish, communicate, and | ||||
otherwise manage key information in DTN. Certain DTN | ||||
deployments might follow established protocols for key | ||||
management, whereas other DTN deployments might require new and | ||||
novel approaches. BPSec assumes that key management is handled | ||||
as a separate part of network management; this specification | ||||
neither defines nor requires a specific strategy for key management. | ||||
</t> | </t> | |||
</section> | </section> | |||
</section> | <section anchor="PolCons" toc="default" numbered="true"> | |||
<name>Security Policy Considerations</name> | ||||
<section anchor="KeyMgmt" title="Key Management" toc="default"> | <t> | |||
<t> | ||||
There exist a myriad of ways to establish, communicate, and otherwise | ||||
manage key information in a DTN. Certain DTN deployments might follow | ||||
established protocols for key management whereas other DTN deployments | ||||
might require new and novel approaches. BPSec assumes that key | ||||
management is handled as a separate part of network management and this | ||||
specification neither defines nor requires a specific key management | ||||
strategy. | ||||
</t> | ||||
</section> | ||||
<section anchor="PolCons" title="Security Policy Considerations" toc="default"> | ||||
<t> | ||||
When implementing BPSec, several policy decisions must be | When implementing BPSec, several policy decisions must be | |||
considered. This section describes key policies that affect the | considered. This section describes key policies that affect the | |||
generation, forwarding, and receipt of bundles that are secured using | generation, forwarding, and receipt of bundles that are secured using | |||
this specification. No single set of policy decisions is envisioned to | this specification. No single set of policy decisions is envisioned to | |||
work for all secure DTN deployments. | work for all secure DTN deployments. | |||
<list style="symbols"> | </t> | |||
<t> | <ul spacing="normal"> | |||
<li> | ||||
If a bundle is received that contains combinations of | If a bundle is received that contains combinations of | |||
security operations that are disallowed by this specification the BP | security operations that are disallowed by this | |||
A must | specification, the BPA must determine how to handle the | |||
determine how to handle the bundle. The bundle may be discarded, | bundle: the bundle may be discarded, the block affected by | |||
the block affected by the security operation may be discarded, or | the security operation may be discarded, or one security | |||
one security operation may be favored over another. | operation may be favored over another. | |||
</t> | </li> | |||
<li> | ||||
<t> | ||||
BPAs in the network must understand what security operations they | BPAs in the network must understand what security operations they | |||
should apply to bundles. This decision may be based on the source | should apply to bundles. This decision may be based on the source | |||
of the bundle, the destination of the bundle, or some other | of the bundle, the destination of the bundle, or some other | |||
information related to the bundle. | information related to the bundle. | |||
</t> | </li> | |||
<li> | ||||
<t> | If a waypoint has been configured to add a security | |||
If a waypoint has been configured to add a | operation to a bundle, and the received bundle already has | |||
security operation to a bundle, and the received bundle already has | the security operation applied, then the receiver must | |||
the security operation applied, then the receiver must understand | understand what to do. The receiver may discard the | |||
what to do. The receiver may discard the bundle, discard the | bundle, discard the security target and associated BPSec | |||
security target and associated BPSec blocks, replace the | blocks, replace the security operation, or take some other | |||
security operation, or some other action. | action. | |||
</t> | </li> | |||
<li> | ||||
<t> | It is <bcp14>RECOMMENDED</bcp14> that security operations | |||
It is RECOMMENDED that security operations be applied to every | be applied to every block in a bundle and that the default | |||
block in a bundle and that the default behavior of a bundle agent is | behavior of a BPA be to use the security services | |||
to use the security services defined in this specification. Designer | defined in this specification. Designers should only | |||
s | deviate from the use of security operations when the | |||
should only deviate from the use of security operations when the dev | deviation can be justified -- such as when doing so causes | |||
iation | downstream errors when processing blocks whose contents | |||
can be justified - such as when doing so causes | must be inspected or changed at one or more hops along the | |||
downstream errors when processing blocks whose contents must be | path. | |||
inspected or changed at one or more hops along the path. | </li> | |||
</t> | <li> | |||
BCB security contexts can alter the size of extension | ||||
<t> | blocks and the payload block. Security policy | |||
BCB security contexts can alter the size of extension blocks and the | <bcp14>SHOULD</bcp14> consider how changes to the size of | |||
payload block. Security policy SHOULD consider how changes to the si | a block could negatively effect bundle processing (e.g., | |||
ze | calculating storage needs and scheduling transmission | |||
of a block could negatively effect bundle processing (e.g., | times). | |||
calculating storage needs and scheduling transmission times). | </li> | |||
</t> | <li> | |||
<t> | ||||
<t> | ||||
Adding a BIB to a security target that has already been encrypted | Adding a BIB to a security target that has already been encrypted | |||
by a BCB is not allowed. If this condition is likely to be | by a BCB is not allowed. If this condition is likely to be | |||
encountered, there are (at least) three possible policies that | encountered, there are (at least) three possible policies that | |||
could handle this situation. | could handle this situation. | |||
<list style="numbers"> | </t> | |||
<t> | <ol spacing="normal" type="1"><li> | |||
At the time of encryption, a security context can be | At the time of encryption, a security context can be | |||
selected which computes a plain text integrity-protection mech anism | selected that computes a plaintext integrity-protection mechan ism | |||
that is included as a security context result field. | that is included as a security context result field. | |||
</t> | </li> | |||
<t> | <li> | |||
The encrypted block may be replicated as a new block with | The encrypted block may be replicated as a new block with | |||
a new block number and given integrity protection. | a new block number and may be given integrity protection. | |||
</t> | </li> | |||
<t> | <li> | |||
An encapsulation scheme may be applied to encapsulate the | An encapsulation scheme may be applied to encapsulate the | |||
security target (or the entire bundle) such that the | security target (or the entire bundle) such that the | |||
encapsulating structure is, itself, no longer the security | encapsulating structure is, itself, no longer the security | |||
target of a BCB and may therefore be the security target of | target of a BCB and may therefore be the security target of | |||
a BIB. | a BIB. | |||
</t> | </li> | |||
</list> | </ol> | |||
</t> | </li> | |||
<li> | ||||
<t> | Security policy <bcp14>SHOULD</bcp14> address whether cipher | |||
Security policy SHOULD address whether cipher | suites whose ciphertext is larger than the initial | |||
suites whose cipher text is larger than the initial | plaintext are permitted and, if so, for what types of blocks. | |||
plain text are permitted and, if so, for what types of blocks. | ||||
Changing the size of a block may cause processing difficulties for | Changing the size of a block may cause processing difficulties for | |||
networks that calculate block offsets into bundles or predict | networks that calculate block offsets into bundles or predict | |||
transmission times or storage availability as a function of bundle | transmission times or storage availability as a function of bundle | |||
size. In other cases, changing the size of a payload as part of | size. In other cases, changing the size of a payload as part of | |||
encryption has no significant impact. | encryption has no significant impact. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | <section anchor="ReasonCodes" numbered="true" toc="default"> | |||
<section anchor="ReasonCodes" title="Security Reason Codes"> | <name>Security Reason Codes</name> | |||
<t> | <t> | |||
Bundle protocol agents (BPAs) must process blocks and bundles in | BPAs must process blocks and bundles in | |||
accordance with both BP policy and BPSec policy. The decision to | accordance with both BP policy and BPSec policy. The decision to | |||
receive, forward, deliver, or delete a bundle may be communicated to | receive, forward, deliver, or delete a bundle may be communicated to | |||
the report-to address of the bundle, in the form of a status report, | the report-to address of the bundle in the form of a status report, | |||
as a method of tracking the progress of the bundle through the | as a method of tracking the progress of the bundle through the | |||
network. The status report for a bundle may be augmented with a | network. The status report for a bundle may be augmented with a | |||
"reason code" explaining why the particular action was taken on the | "reason code" explaining why the particular action was taken on the | |||
bundle. | bundle. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
This section describes a set of reason codes associated with the | This section describes a set of reason codes associated with the | |||
security processing of a bundle. The communication of security-related | security processing of a bundle. The communication of security-related | |||
status reports might reduce the security of a network if these reports | status reports might reduce the security of a network if these reports | |||
are intercepted by unintended recipients. BPSec policy SHOULD specify | are intercepted by unintended recipients. BPSec policy <bcp14>SHOULD</b cp14> specify | |||
the conditions in which sending security reason codes are appropriate. | the conditions in which sending security reason codes are appropriate. | |||
Examples of appropriate conditions for the use of security reason codes | Examples of appropriate conditions for the use of security reason codes | |||
could include the following. | could include the following. | |||
<list style="symbols"> | </t> | |||
<t> | <ul spacing="normal"> | |||
When the report-to address is verified as unchanged from the bund | <li> | |||
le source. | When the report-to address is verified as unchanged | |||
This can occur by placing an appropriate BIB on the bundle primar | from the bundle source. This can occur by placing an | |||
y | appropriate BIB on the bundle primary block. | |||
block. | </li> | |||
</t> | <li> | |||
<t> | When the block containing a status report with a | |||
When the block containing a status report with a security reason | security reason code is encrypted by a BCB. | |||
code | </li> | |||
is encrypted by a BCB. | <li> | |||
</t> | When a status report containing a security reason code | |||
<t> | is only sent for security issues relating to bundles | |||
When a status report containing a security reason code is only se | and/or blocks associated with non-operational user data | |||
nt for | or test data. | |||
security issues relating to bundles and/or blocks associated | </li> | |||
with non-operational user data or otherwise with test data. | <li> | |||
</t> | When a status report containing a security reason code | |||
<t> | is only sent for security issues associated with | |||
When a status report containing a security reason code is only se | non-operational security contexts, or security contexts | |||
nt for | using non-operational configurations, such as test | |||
security issues associated with non-operational security contexts | keys. | |||
, or | </li> | |||
security contexts using non-operational configurations, such as t | </ul> | |||
est keys. | <t> | |||
</t> | Security reason codes are assigned in accordance with <xref | |||
</list> | target="secreasoncode" format="default"/> and are as | |||
</t> | described below. | |||
<t> | ||||
Security reason codes are assigned in accordance with | ||||
<xref target="secreasoncode"/> and are as described below. | ||||
<list style="hanging" hangIndent="6"> | ||||
<t hangText="Missing Security Operation:"> <vspace/> | ||||
This reason code indicates that a bundle was missing one or | ||||
more required security operations. This reason code is typically | ||||
used by a security verifier or security acceptor. | ||||
</t> | ||||
<t hangText="Unknown Security Operation:"> <vspace/> | ||||
This reason code indicates that one or more security operations | ||||
present in a bundle cannot be understood by the security verifier | ||||
or | ||||
security acceptor for the operation. For example, this reason co | ||||
de may be used if | ||||
a security block references an unknown security context identifie | ||||
r | ||||
or security context parameter. This reason code should not be use | ||||
d | ||||
for security operations for which the node is not a security veri | ||||
fier | ||||
or security acceptor; there is no requirement that all nodes in | ||||
a network understand all security contexts, security context | ||||
parameters, and security services for every bundle in a network. | ||||
</t> | ||||
<t hangText="Unexpected Security Operation:"> <vspace/> | </t> | |||
<dl newline="true" spacing="normal" indent="6"> | ||||
<dt>Missing security operation:</dt> | ||||
<dd> | ||||
This reason code indicates that a bundle was missing | ||||
one or more required security operations. This reason | ||||
code is typically used by a security verifier or | ||||
security acceptor. | ||||
</dd> | ||||
<dt>Unknown security operation:</dt> | ||||
<dd> | ||||
This reason code indicates that one or more security | ||||
operations present in a bundle cannot be understood by | ||||
the security verifier or security acceptor for the | ||||
operation. For example, this reason code may be used | ||||
if a security block references an unknown security | ||||
context identifier or security context parameter. This | ||||
reason code should not be used for security operations | ||||
for which the node is not a security verifier or | ||||
security acceptor; there is no requirement that all | ||||
nodes in a network understand all security contexts, | ||||
security context parameters, and security services for | ||||
every bundle in a network. | ||||
</dd> | ||||
<dt>Unexpected security operation:</dt> | ||||
<dd> | ||||
This reason code indicates that a receiving node is neither a | This reason code indicates that a receiving node is neither a | |||
security verifier nor a security acceptor for at least one | security verifier nor a security acceptor for at least one | |||
security operation in a bundle. This reason code should not | security operation in a bundle. This reason code should not | |||
be seen as an error condition; not every node is a security | be seen as an error condition: not every node is a security | |||
verifier or security acceptor for every security operation in | verifier or security acceptor for every security operation in | |||
every bundle. In certain networks, this reason code may be | every bundle. In certain networks, this reason code may be | |||
useful in identifying misconfigurations of security policy. | useful in identifying misconfigurations of security policy. | |||
</t> | </dd> | |||
<dt>Failed security operation:</dt> | ||||
<t hangText="Failed Security Operation:"> <vspace/> | <dd> | |||
This reason code indicates that one or more security operations i | This reason code indicates that one or more security | |||
n | operations in a bundle failed to process as expected | |||
a bundle failed to process as expected for reasons other than | for reasons other than misconfiguration. This may occur | |||
misconfiguration. This may occur when a security-source is unable | when a security-source is unable to add a security | |||
to add a | block to a bundle. This may occur if the target of a | |||
security block to a bundle. This may occur if the target of a se | security operation fails to verify using the defined | |||
curity | security context at a security verifier. This may also | |||
operation fails to verify using the defined security context at a | occur if a security operation fails to be processed | |||
security verifier. | without error at a security acceptor. | |||
This may also occur if a security operation fails to be processed | </dd> | |||
without error at | <dt>Conflicting security operation:</dt> | |||
a security acceptor. | <dd> | |||
</t> | This reason code indicates that two or more security | |||
operations in a bundle are not conformant with the | ||||
<t hangText="Conflicting Security Operations:"> <vspace/> | BPSec specification and that security processing was | |||
This reason code indicates that two or more security operations i | unable to proceed because of a BPSec protocol | |||
n a bundle | violation. | |||
are not conformant with the BPSec specification and that security | </dd> | |||
processing | </dl> | |||
was unable to proceed because of a BPSec protocol violation. | </section> | |||
</t> | </section> | |||
</list> | <section anchor="SecCons" toc="default" numbered="true"> | |||
</t> | <name>Security Considerations</name> | |||
</section> | ||||
</section> | ||||
<section anchor="SecCons" title="Security Considerations" toc="default"> | ||||
<t> | ||||
Given the nature of DTN applications, it is | ||||
expected that bundles may traverse a variety of environments and devices | ||||
which each pose unique security risks and requirements on the | ||||
implementation of security within BPSec. For these reasons, it is | ||||
important to introduce key threat models and describe the roles and | ||||
responsibilities of the BPSec protocol in protecting the confidentiality | ||||
and integrity of the data against those threats. This section provides | ||||
additional discussion on security threats that BPSec will face and | ||||
describes how BPSec security mechanisms operate to mitigate these | ||||
threats. | ||||
</t> | ||||
<t> | ||||
The threat model described here is assumed to have a set of capabilities | ||||
identical to those described by the Internet Threat Model in | ||||
<xref target="RFC3552"/>, but the BPSec threat model is scoped to | ||||
illustrate threats specific to BPSec operating within DTN environments | ||||
and therefore focuses on on-path-attackers (OPAs). In doing | ||||
so, it is assumed that the DTN (or significant portions of the DTN) are | ||||
completely under the control of an attacker. | ||||
</t> | ||||
<section anchor="SecConsAttack" title="Attacker Capabilities and Objectives"> | ||||
<t> | ||||
BPSec was designed to protect against OPA threats which may have access | ||||
to a | ||||
bundle during transit from its source, Alice, to its destination, Bob. | ||||
An OPA node, | ||||
Olive, is a non-cooperative node operating on the DTN between Alice and | ||||
Bob that | ||||
has the ability to receive bundles, examine bundles, modify bundles, fo | ||||
rward bundles, | ||||
and generate bundles at will in order to compromise the confidentiality | ||||
or integrity | ||||
of data within the DTN. There are three classes of OPA nodes which are | ||||
differentiated based | ||||
on their access to cryptographic material: | ||||
<list style="symbols"> | ||||
<t> | ||||
Unprivileged Node: Olive has not been provisioned within the secu | ||||
re environment and | ||||
only has access to cryptographic material which has been publicly | ||||
-shared. | ||||
</t> | ||||
<t> | ||||
Legitimate Node: Olive is within the secure environment and there | ||||
fore has | ||||
access to cryptographic material which has been provisioned to Ol | ||||
ive (i.e., K_M) | ||||
as well as material which has been publicly-shared. | ||||
</t> | ||||
<t> | ||||
Privileged Node: Olive is a privileged node within the secure env | ||||
ironment | ||||
and therefore has access to cryptographic material which has been | ||||
provisioned to | ||||
Olive, Alice and/or Bob (i.e. K_M, K_A, and/or K_B) as well as ma | ||||
terial which | ||||
has been publicly-shared. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t> | <t> | |||
If Olive is operating as a privileged node, this is tantamount to compr | Given the nature of DTN applications, it is expected that | |||
omise; | bundles may traverse a variety of environments and devices that | |||
BPSec does not provide mechanisms to detect or remove Olive from the DT | each pose unique security risks and requirements on the | |||
N or | implementation of security within BPSec. For this reason, it | |||
BPSec secure environment. It is up to the BPSec implementer or the und | is important to introduce key threat models and describe the | |||
erlying | roles and responsibilities of the BPSec protocol in protecting | |||
cryptographic mechanisms to provide appropriate capabilities if they ar | the confidentiality and integrity of the data against those | |||
e needed. | threats. This section provides additional discussion on security | |||
It should also be noted that if the implementation of BPSec uses a sing | threats that BPSec will face and describes how BPSec security | |||
le set of | mechanisms operate to mitigate these threats. | |||
shared cryptographic material for all nodes, a legitimate node is equiv | ||||
alent to a | ||||
privileged node because K_M == K_A == K_B. For this reason, sharing cry | ||||
ptographic | ||||
material in this way is not recommended. | ||||
</t> | </t> | |||
<t> | <t> | |||
A special case of the legitimate node is when Olive is either Alice or | The threat model described here is assumed to have a set of | |||
Bob | capabilities identical to those described by the Internet Threat | |||
(i.e., K_M == K_A or K_M == K_B). In this case, Olive is able to imper | Model in <xref target="RFC3552" format="default"/>, but the | |||
sonate | BPSec threat model is scoped to illustrate threats specific to | |||
traffic as either Alice or Bob, respectively, which means that traffic | BPSec operating within DTN environments; therefore, it focuses on | |||
to and from that node can be | on-path attackers (OPAs). In doing so, it is assumed that the | |||
decrypted and encrypted, respectively. Additionally, messages may be s | delay-tolerant network (or significant portions of the delay-tolerant netw | |||
igned as | ork) are completely under | |||
originating from one of the endpoints. | the control of an attacker. | |||
</t> | </t> | |||
</section> | <section anchor="SecConsAttack" numbered="true" toc="default"> | |||
<name>Attacker Capabilities and Objectives</name> | ||||
<section anchor="SecConsBehave" title="Attacker Behaviors and BPSec Mitigatio | <t> | |||
ns" toc="default"> | BPSec was designed to protect against OPA threats that may | |||
have access to a bundle during transit from its source, | ||||
<section title="Eavesdropping Attacks" toc="default"> | Alice, to its destination, Bob. | |||
<t> | An OPA node, Olive, is a | |||
Once Olive has received a bundle, she is able to examine the content | noncooperative node operating on the delay-tolerant network between Ali | |||
s of that | ce and | |||
bundle and attempt to recover any protected data or cryptographic ke | Bob that has the ability to receive bundles, examine bundles, | |||
ying material | modify bundles, forward bundles, and generate bundles at will | |||
from the blocks contained within. The protection mechanism that BPS | in order to compromise the confidentiality or integrity of | |||
ec provides against | data within the delay-tolerant network. There are three classes of OPA | |||
this action is the BCB, which encrypts the contents of its security | nodes | |||
target, providing | that are differentiated based on their access to | |||
confidentiality of the data. Of course, it should be assumed that O | cryptographic material: | |||
live is able to | ||||
attempt offline recovery of encrypted data, so the cryptographic mec | ||||
hanisms selected | ||||
to protect the data should provide a suitable level of protection. | ||||
</t> | ||||
<t> | ||||
When evaluating the risk of eavesdropping attacks, it is important t | ||||
o consider the lifetime | ||||
of bundles on a DTN. Depending on the network, bundles may persist | ||||
for days or even years. | ||||
Long-lived bundles imply that the data exists in the network for a l | ||||
onger period of time and, | ||||
thus, there may be more opportunities to capture those bundles. Addi | ||||
tionally, bundles that | ||||
are long-lived imply that the information stored within them may rem | ||||
ain relevant and sensitive | ||||
for long enough that, once captured, there is sufficient time to cra | ||||
ck encryption associated | ||||
with the bundle. If a bundle does persist on the network for years a | ||||
nd the cipher suite used for a BCB provides inadequate protection, Olive may be | ||||
able to recover the protected data either before that bundle reaches its intende | ||||
d destination or before the information in the bundle is no longer considered se | ||||
nsitive. | ||||
</t> | ||||
<t> | ||||
NOTE: Olive is not limited by the bundle lifetime and may retain a g | ||||
iven bundle indefinitely. | ||||
</t> | ||||
<t> | ||||
NOTE: Irrespective of whether BPSec is used, traffic analysis will b | ||||
e possible. | ||||
</t> | ||||
</section> | ||||
<section title="Modification Attacks" toc="default"> | ||||
<t> | ||||
As a node participating in the DTN between Alice and Bob, Olive will | ||||
also be | ||||
able to modify the received bundle, including non-BPSec data such as | ||||
the primary | ||||
block, payload blocks, or block processing control flags as defined | ||||
in <xref target="I-D.ietf-dtn-bpbis"/>. Olive | ||||
will be able to undertake activities which include modification of d | ||||
ata within the blocks, | ||||
replacement of blocks, addition of blocks, or removal of blocks. Wi | ||||
thin BPSec, both the BIB | ||||
and BCB provide integrity protection mechanisms to detect or prevent | ||||
data manipulation | ||||
attempts by Olive. | ||||
</t> | ||||
<t> | ||||
The BIB provides that protection to another block which is its secur | ||||
ity target. The | ||||
cryptographic mechanisms used to generate the BIB should be strong a | ||||
gainst collision attacks | ||||
and Olive should not have access to the cryptographic material used | ||||
by the originating node | ||||
to generate the BIB (e.g., K_A). If both of these conditions are tr | ||||
ue, Olive will be unable | ||||
to modify the security target or the BIB and lead Bob to validate th | ||||
e security target as | ||||
originating from Alice. | ||||
</t> | ||||
<t> | ||||
Since BPSec security operations are implemented by placing blocks in | ||||
a bundle, there | ||||
is no in-band mechanism for detecting or correcting certain cases wh | ||||
ere Olive removes | ||||
blocks from a bundle. If Olive removes a BCB, but keeps the security | ||||
target, the | ||||
security target remains encrypted and there is a possibility that th | ||||
ere may no longer be | ||||
sufficient information to decrypt the block at its destination. If | ||||
Olive removes both a | ||||
BCB (or BIB) and its security target there is no evidence left in th | ||||
e bundle of the security | ||||
operation. Similarly, if Olive removes the BIB but not the security | ||||
target there is | ||||
no evidence left in the bundle of the security operation. In each o | ||||
f these cases, the | ||||
implementation of BPSec must be combined with policy configuration a | ||||
t endpoints in the | ||||
network which describe the expected and required security operations | ||||
that must be applied | ||||
on transmission and are expected to be present on receipt. This or | ||||
other similar | ||||
out-of-band information is required to correct for removal of securi | ||||
ty information in the | ||||
bundle. | ||||
</t> | ||||
<t> | ||||
A limitation of the BIB may exist within the implementation of BIB v | ||||
alidation at the destination | ||||
node. If Olive is a legitimate node within the DTN, the BIB generat | ||||
ed by Alice with K_A can be | ||||
replaced with a new BIB generated with K_M and forwarded to Bob. If | ||||
Bob is only validating | ||||
that the BIB was generated by a legitimate user, Bob will acknowledg | ||||
e the message as originating | ||||
from Olive instead of Alice. Validating a BIB indicates only that th | ||||
e BIB was generated | ||||
by a holder of the relevant key; it does not provide any guarantee t | ||||
hat the bundle or block was created by the same entity. In order to provide veri | ||||
fiable integrity checks BCB should require | ||||
an encryption scheme that is Indistinguishable under adaptive Chosen | ||||
Ciphertext Attack (IND-CCA2) secure. Such an encryption scheme | ||||
will guard against signature substitution attempts by Olive. In this | ||||
case, Alice creates a BIB | ||||
with the protected data block as the security target and then | ||||
creates a BCB with both the BIB and protected data block as its secu | ||||
rity targets. | ||||
</t> | ||||
</section> | ||||
<section anchor="SecConsTopAtck" title="Topology Attacks" toc="default"> | ||||
<t> | ||||
If Olive is in a OPA position within the DTN, she is able to influe | ||||
nce how any | ||||
bundles that come to her may pass through the network. Upon receivi | ||||
ng and processing a | ||||
bundle that must be routed elsewhere in the network, Olive has three | ||||
options as to how | ||||
to proceed: not forward the bundle, forward the bundle as intended, | ||||
or forward the bundle | ||||
to one or more specific nodes within the network. | ||||
</t> | ||||
<t> | ||||
Attacks that involve re-routing the packets throughout the network a | ||||
re essentially a special | ||||
case of the modification attacks described in this section where the | ||||
attacker is modifying | ||||
fields within the primary block of the bundle. Given that BPSec can | ||||
not encrypt the contents | ||||
of the primary block, alternate methods must be used to prevent this | ||||
situation. These methods | ||||
may include requiring BIBs for primary blocks, using encapsulation, | ||||
or otherwise strategically | ||||
manipulating primary block data. The specifics of any such mitigatio | ||||
n technique | ||||
are specific to the implementation of the deploying network and outs | ||||
ide of the scope of this | ||||
document. | ||||
</t> | ||||
<t> | </t> | |||
Furthermore, routing rules and policies may be useful in enforcing p | <dl spacing="normal"> | |||
articular traffic flows | <dt>Unprivileged Node:</dt><dd>Olive has not been provisioned | |||
to prevent topology attacks. While these rules and policies may uti | within the secure environment and only has access to | |||
lize some features | cryptographic material that has been publicly shared. | |||
provided by BPSec, their definition is beyond the scope of this spec | </dd> | |||
ification. | <dt>Legitimate Node:</dt><dd>Olive is within the secure environment; | |||
</t> | therefore, Olive has access to cryptographic material | |||
that has been provisioned to Olive (i.e., K<sub>M</sub>) as well | ||||
as material that has been publicly shared. | ||||
</dd> | ||||
<dt>Privileged Node:</dt><dd>Olive is a privileged node within the | ||||
secure environment; therefore, Olive has access to | ||||
cryptographic material that has been provisioned to | ||||
Olive, Alice, and/or Bob (i.e., K<sub>M</sub>, K<sub>A</sub>, and | ||||
/or K<sub>B</sub>) as | ||||
well as material that has been publicly shared. | ||||
</dd> | ||||
</dl> | ||||
<t> | ||||
If Olive is operating as a privileged node, this is | ||||
tantamount to compromise; BPSec does not provide mechanisms | ||||
to detect or remove Olive from the delay-tolerant network or BPSec secu | ||||
re | ||||
environment. It is up to the BPSec implementer or the | ||||
underlying cryptographic mechanisms to provide appropriate | ||||
capabilities if they are needed. It should also be noted | ||||
that if the implementation of BPSec uses a single set of | ||||
shared cryptographic material for all nodes, a legitimate | ||||
node is equivalent to a privileged node because K<sub>M</sub> == K<sub> | ||||
A</sub> == | ||||
K<sub>B</sub>. For this reason, sharing cryptographic material in this | ||||
way is not recommended. | ||||
</t> | ||||
<t> | ||||
A special case of the legitimate node is when Olive is either | ||||
Alice or Bob (i.e., K<sub>M</sub> == K<sub>A</sub> or K<sub>M</sub> == | ||||
K<sub>B</sub>). In this case, | ||||
Olive is able to impersonate traffic as either Alice or Bob, | ||||
respectively, which means that traffic to and from that node | ||||
can be decrypted and encrypted, respectively. Additionally, | ||||
messages may be signed as originating from one of the | ||||
endpoints. | ||||
</t> | ||||
</section> | </section> | |||
<section anchor="SecConsBehave" toc="default" numbered="true"> | ||||
<section title="Message Injection" toc="default"> | <name>Attacker Behaviors and BPSec Mitigations</name> | |||
<t> | <section toc="default" numbered="true"> | |||
Olive is also able to generate new bundles and transmit them into th | <name>Eavesdropping Attacks</name> | |||
e DTN at will. | <t> | |||
These bundles may either be copies or slight modifications of previo | Once Olive has received a bundle, she is able to examine | |||
usly-observed bundles | the contents of that bundle and attempt to recover any | |||
(i.e., a replay attack) or entirely new bundles generated based on t | protected data or cryptographic keying material from the | |||
he Bundle Protocol, | blocks contained within. The protection mechanism that | |||
BPSec, or other bundle-related protocols. With these attacks Olive' | BPSec provides against this action is the BCB, which | |||
s objectives may | encrypts the contents of its security target, providing | |||
vary, but may be targeting either the bundle protocol or application | confidentiality of the data. Of course, it should be | |||
-layer protocols conveyed | assumed that Olive is able to attempt offline recovery of | |||
by the bundle protocol. The target could also be the storage and com | encrypted data, so the cryptographic mechanisms selected | |||
pute of the nodes running | to protect the data should provide a suitable level of | |||
the bundle or application layer protocols (e.g., a denial of service | protection. | |||
to flood on the | </t> | |||
storage of the store-and-forward mechanism; or compute which would p | <t> | |||
rocess the packets and | When evaluating the risk of eavesdropping attacks, it is | |||
perhaps prevent other activities). | important to consider the lifetime of bundles on DTN. | |||
</t> | Depending on the network, bundles may persist for days or | |||
even years. Long-lived bundles imply that the data exists | ||||
<t> | in the network for a longer period of time and, thus, | |||
BPSec relies on cipher suite capabilities to prevent replay or forge | there may be more opportunities to capture those | |||
d message attacks. | bundles. Additionally, the implication is that long-lived bundles st | |||
A BCB used with appropriate cryptographic mechanisms may provide rep | ore information within that remains relevant and sensitive for long enough that, | |||
lay protection | once | |||
under certain circumstances. Alternatively, | captured, there is sufficient time to crack encryption | |||
application data itself may be augmented to include mechanisms to as | associated with the bundle. If a bundle does persist on | |||
sert data uniqueness | the network for years and the cipher suite used for a BCB | |||
and then protected with a BIB, a BCB, or both along with other block | provides inadequate protection, Olive may be able to | |||
data. In | recover the protected data either before that bundle | |||
such a case, the receiving node would be able to validate the unique | reaches its intended destination or before the information | |||
ness of the data. | in the bundle is no longer considered sensitive. | |||
</t> | </t> | |||
<t> | <t> | |||
For example, a BIB may be used to validate the integrity of a bundle | NOTE: Olive is not limited by the bundle lifetime and may | |||
's primary block, | retain a given bundle indefinitely. | |||
which includes a timestamp and lifetime for the bundle. If a bundle | </t> | |||
is replayed outside | <t> | |||
of its lifetime, then the replay attack will fail as the bundle will | NOTE: Irrespective of whether BPSec is used, traffic | |||
be discarded. Similarly, additional blocks such as the Bundle Age may be signed | analysis will be possible. | |||
and validated to identify replay attacks. Finally, security context parameters | </t> | |||
within BIB and BCB blocks may include anti-replay mechanisms such as | </section> | |||
session identifiers, nonces, and dynamic passwords as supported by network char | <section toc="default" numbered="true"> | |||
acteristics. | <name>Modification Attacks</name> | |||
</t> | <t> | |||
As a node participating in the delay-tolerant network between Alice | ||||
and Bob, | ||||
Olive will also be able to modify the received bundle, | ||||
including non-BPSec data such as the primary block, | ||||
payload blocks, or block processing control flags as | ||||
defined in <xref target="RFC9171" format="default"/>. | ||||
Olive will be able to undertake activities including | ||||
modification of data within the blocks, replacement of | ||||
blocks, addition of blocks, or removal of blocks. Within | ||||
BPSec, both the BIB and BCB provide integrity-protection | ||||
mechanisms to detect or prevent data manipulation attempts | ||||
by Olive. | ||||
</t> | ||||
<t> | ||||
The BIB provides that protection to another block that is | ||||
its security target. The cryptographic mechanisms used to | ||||
generate the BIB should be strong against collision | ||||
attacks, and Olive should not have access to the | ||||
cryptographic material used by the originating node to | ||||
generate the BIB (e.g., K<sub>A</sub>). If both of these conditions | ||||
are true, Olive will be unable to modify the security | ||||
target or the BIB, and thus she cannot lead Bob to validate the secu | ||||
rity | ||||
target as originating from Alice. | ||||
</t> | ||||
<t> | ||||
Since BPSec security operations are implemented by placing | ||||
blocks in a bundle, there is no in-band mechanism for | ||||
detecting or correcting certain cases where Olive removes | ||||
blocks from a bundle. If Olive removes a BCB, but keeps | ||||
the security target, the security target remains encrypted | ||||
and there is a possibility that there may no longer be | ||||
sufficient information to decrypt the block at its | ||||
destination. If Olive removes both a BCB (or BIB) and its | ||||
security target, there is no evidence left in the bundle of | ||||
the security operation. Similarly, if Olive removes the | ||||
BIB, but not the security target, there is no evidence left | ||||
in the bundle of the security operation. In each of these | ||||
cases, the implementation of BPSec must be combined with | ||||
policy configuration at endpoints in the network that | ||||
describe the expected and required security operations | ||||
that must be applied on transmission and that are expected to | ||||
be present on receipt. This or other similar out-of-band | ||||
information is required to correct for removal of security | ||||
information in the bundle. | ||||
</t> | ||||
<t> | ||||
A limitation of the BIB may exist within the | ||||
implementation of BIB validation at the destination node. | ||||
If Olive is a legitimate node within the delay-tolerant network, the | ||||
BIB | ||||
generated by Alice with K<sub>A</sub> can be replaced with a new BIB | ||||
generated with K<sub>M</sub> and forwarded to Bob. If Bob is only | ||||
validating that the BIB was generated by a legitimate | ||||
user, Bob will acknowledge the message as originating from | ||||
Olive instead of Alice. Validating a BIB indicates only | ||||
that the BIB was generated by a holder of the relevant | ||||
key; it does not provide any guarantee that the bundle or | ||||
block was created by the same entity. In order to provide | ||||
verifiable integrity checks, the BCB should require an | ||||
encryption scheme that is Indistinguishable under adaptive | ||||
Chosen Ciphertext Attack (IND-CCA2) secure. Such an | ||||
encryption scheme will guard against signature | ||||
substitution attempts by Olive. In this case, Alice | ||||
creates a BIB with the protected data block as the | ||||
security target and then creates a BCB with both the BIB | ||||
and protected data block as its security targets. | ||||
</t> | ||||
</section> | ||||
<section anchor="SecConsTopAtck" toc="default" numbered="true"> | ||||
<name>Topology Attacks</name> | ||||
<t> | ||||
If Olive is in an OPA position within the delay-tolerant network, s | ||||
he is able | ||||
to influence how any bundles that come to her may pass | ||||
through the network. Upon receiving and processing a | ||||
bundle that must be routed elsewhere in the network, | ||||
Olive has three options as to how to proceed: not forward | ||||
the bundle, forward the bundle as intended, or forward | ||||
the bundle to one or more specific nodes within the | ||||
network. | ||||
</t> | ||||
<t> | ||||
Attacks that involve rerouting the bundles throughout the | ||||
network are essentially a special case of the modification | ||||
attacks described in this section, one where the attacker is | ||||
modifying fields within the primary block of the bundle. | ||||
Given that BPSec cannot encrypt the contents of the | ||||
primary block, alternate methods must be used to prevent | ||||
this situation. These methods may include requiring BIBs | ||||
for primary blocks, using encapsulation, or otherwise | ||||
strategically manipulating primary block data. The | ||||
details of any such mitigation technique are specific to | ||||
the implementation of the deploying network and are outside of | ||||
the scope of this document. | ||||
</t> | ||||
<t> | ||||
Furthermore, routing rules and policies may be useful in | ||||
enforcing particular traffic flows to prevent topology | ||||
attacks. While these rules and policies may utilize some | ||||
features provided by BPSec, their definition is beyond the | ||||
scope of this specification. | ||||
</t> | ||||
</section> | ||||
<section toc="default" numbered="true"> | ||||
<name>Message Injection</name> | ||||
<t> | ||||
Olive is also able to generate new bundles and transmit | ||||
them into the delay-tolerant network at will. | ||||
These bundles may be either 1) | ||||
copies or slight modifications of previously observed | ||||
bundles (i.e., a replay attack) or 2) entirely new bundles | ||||
generated based on the Bundle Protocol, BPSec, or other | ||||
bundle-related protocols. With these attacks, Olive's | ||||
objectives may vary, but may be targeting either the | ||||
Bundle Protocol or application-layer protocols conveyed by | ||||
the Bundle Protocol. The target could also be the storage | ||||
and computing capabilities of the nodes running the bundle or | ||||
application-layer protocols (e.g., a denial of service to | ||||
flood on the storage of the store-and-forward mechanism or | ||||
a computation that would process the bundles and perhaps | ||||
prevent other activities). | ||||
</t> | ||||
<t> | ||||
BPSec relies on cipher suite capabilities to prevent | ||||
replay or forged message attacks. A BCB used with | ||||
appropriate cryptographic mechanisms may provide replay | ||||
protection under certain circumstances. Alternatively, | ||||
application data itself may be augmented to include | ||||
mechanisms to assert data uniqueness and then be protected | ||||
with a BIB, a BCB, or both along with other block data. In | ||||
such a case, the receiving node would be able to validate | ||||
the uniqueness of the data. | ||||
</t> | ||||
<t> | ||||
For example, a BIB may be used to validate the integrity | ||||
of a bundle's primary block, which includes a timestamp | ||||
and lifetime for the bundle. If a bundle is replayed | ||||
outside of its lifetime, then the replay attack will fail | ||||
as the bundle will be discarded. Similarly, additional | ||||
blocks, such as the Bundle Age, may be signed and validated | ||||
to identify replay attacks. Finally, security context | ||||
parameters within BIBs and BCBs may include | ||||
anti-replay mechanisms such as session identifiers, | ||||
nonces, and dynamic passwords as supported by network | ||||
characteristics. | ||||
</t> | ||||
</section> | ||||
</section> | </section> | |||
</section> | </section> | |||
</section> | <section anchor="sec_ctx" numbered="true" toc="default"> | |||
<name>Security Context Considerations</name> | ||||
<section anchor="sec_ctx" title="Security Context Considerations"> | <section numbered="true" toc="default"> | |||
<section title="Mandating Security Contexts"> | <name>Mandating Security Contexts</name> | |||
<t> | <t> | |||
Because of the diversity of networking scenarios and node capabilities | Because of the diversity of networking scenarios and node | |||
that may utilize BPSec there is a risk that a single security context m | capabilities that may utilize BPSec, there is a risk that a | |||
andated | single security context mandated for every possible BPSec | |||
for every possible BPSec implementation is not feasible. For example, a | implementation is not feasible. For example, a security | |||
security context | context appropriate for a resource-constrained node with | |||
appropriate for a resource-constrained node with limited | limited connectivity may be inappropriate for use in a | |||
connectivity may be inappropriate for use in a well-resourced, well | well-resourced, well-connected node. | |||
connected node. | </t> | |||
</t> | <t> | |||
<t> | This does not mean that the use of BPSec in a particular | |||
This does not mean that the use of BPSec in a particular network is | network is meant to happen without security contexts for | |||
meant to be used without security contexts for interoperability and | interoperability and default behavior. Network designers must | |||
default behavior. Network designers must identify the minimal set of | identify the minimal set of security contexts necessary for | |||
security contexts necessary for functions in their network. For example | functions in their network. For example, a default set of | |||
, | security contexts could be created for use over the | |||
a default set of security contexts could be created for use over the | terrestrial Internet, and they could be required by any BPSec implement | |||
terrestrial Internet and required by any BPSec implementation communica | ation | |||
ting | communicating over the terrestrial Internet. | |||
over the terrestrial Internet. | </t> | |||
</t> | <t> | |||
<t> | To ensure interoperability among various implementations, all | |||
To ensure interoperability among various implementations, all BPSec imp | BPSec implementations <bcp14>MUST</bcp14> support at least | |||
lementations | the current, mandatory security context(s) defined in IETF Standards Tr | |||
MUST support at least the current IETF standards-track mandatory securi | ack | |||
ty context(s). | RFCs. As of this writing, that BP mandatory security | |||
As of this writing, that BCP mandatory security context is specified in | context is specified in <xref target="RFC9173" | |||
<xref target="I-D.ietf-dtn-bpsec-default-sc"/>, | format="default"/>, but the mandatory security context(s) | |||
but the mandatory security context(s) might change over time in accorda | might change over time in accordance with usual IETF | |||
nce with usual IETF processes. | processes. Such changes are likely to occur in the future | |||
Such changes are likely to occur in the future if/when flaws are discov | if/when flaws are discovered in the applicable cryptographic | |||
ered in the applicable cryptographic | ||||
algorithms, for example. | algorithms, for example. | |||
</t> | </t> | |||
<t> | ||||
<t> | Additionally, BPSec implementations need to support the | |||
Additionally, BPsec implementations need to support the security contex | security contexts that are required by the BP | |||
ts which are specified and/or used | networks in which they are deployed. | |||
by the BP networks in which they are deployed. | </t> | |||
</t> | <t> | |||
<t> | If a node serves as a gateway between two or more networks, | |||
If a node serves as a gateway amongst two or more networks, the BPSec i | the BPSec implementation at that node needs to support the | |||
mplementation at that node needs | union of security contexts mandated in those networks. | |||
to support the union of security contexts mandated in those networks. | </t> | |||
</t> | <t> | |||
<t> | BPSec has been designed to allow for a diversity of security | |||
BPSec has been designed to allow for a diversity of security contexts | contexts and for new contexts to be defined over time. The | |||
and for new contexts to be defined over time. The use of different secu | use of different security contexts does not change the BPSec | |||
rity contexts | protocol itself, and the definition of new security contexts | |||
does not change the BPSec protocol itself and the definition of new sec | <bcp14>MUST</bcp14> adhere to the requirements of such | |||
urity contexts | contexts as presented in this section and generally in this | |||
MUST adhere to the requirements of such contexts as presented in this s | specification. | |||
ection and | </t> | |||
generally in this specification. | <t> | |||
</t> | Implementers should monitor the state of security context | |||
<t> | specifications to check for future updates and replacement. | |||
Implementors should monitor the state of security context specification | </t> | |||
s to check | </section> | |||
for future updates and replacement. | <section numbered="true" toc="default"> | |||
</t> | <name>Identification and Configuration</name> | |||
</section> | <t> | |||
Security blocks uniquely identify the security context to be | ||||
<section title="Identification and Configuration"> | used in the processing of their security services. The | |||
<t> | security context for a security block <bcp14>MUST</bcp14> be | |||
Security blocks uniquely identify the security context to be used in th | uniquely identifiable and <bcp14>MAY</bcp14> use parameters | |||
e | for customization. | |||
processing of their security services. The security context for a secur | </t> | |||
ity | <t> | |||
block MUST be uniquely identifiable and MAY use parameters for customiz | To reduce the number of security contexts used in a network, | |||
ation. | security context designers should make security contexts | |||
</t> | customizable through the definition of security context | |||
parameters. For example, a single security context could be | ||||
<t> | associated with a single cipher suite and security context | |||
To reduce the number of security contexts used in a network, security c | parameters could be used to configure the use of this | |||
ontext | security context with different key lengths and different key | |||
designers should make security contexts customizable through the defini | management options without needing to define separate | |||
tion of | ||||
security context parameters. For example, a single security context cou | ||||
ld be | ||||
associated with a single cipher suite and security context parameters c | ||||
ould be | ||||
used to configure the use of this security context with different key l | ||||
engths | ||||
and different key management options without needing to define separate | ||||
security contexts for each possible option. | security contexts for each possible option. | |||
</t> | </t> | |||
<t> | ||||
<t> | A single security context may be used in the application of | |||
A single security context may be used in the application of more than o | more than one security service. This means that a security | |||
ne | context identifier <bcp14>MAY</bcp14> be used with a BIB, | |||
security service. This means that a security context identifier MAY be | with a BCB, or with any other BPSec-compliant security block. | |||
used with a BIB, with a BCB, or with any other BPSec-compliant security | The definition of a security context <bcp14>MUST</bcp14> | |||
block. | identify which security services may be used with the | |||
The definition of a security context MUST identify which security servi | security context, how security context parameters are | |||
ces may | interpreted as a function of the security operation being | |||
be used with the security context, how security context parameters are | supported, and which security results are produced for each | |||
interpreted | security service. | |||
as a function of the security operation being supported, and which secu | </t> | |||
rity | <t> | |||
results are produced for each security service. | Network operators must determine the number, type, and | |||
</t> | configuration of security contexts in a system. Networks with | |||
rapidly changing configurations may define relatively few | ||||
<t> | security contexts with each context customized with multiple | |||
Network operators must determine the number, type, and configuration | parameters. For networks with more stability, or an increased | |||
of security contexts in a system. Networks with rapidly changing | need for confidentiality, a larger number of contexts can be | |||
configurations may define relatively few security contexts with each | defined with each context supporting few, if any, parameters. | |||
context customized with multiple parameters. For networks with more | </t> | |||
stability, or an increased need for confidentiality, a larger number | ||||
of contexts can be defined with each context supporting few, if any, | ||||
parameters. | ||||
</t> | ||||
<texttable align="center" anchor="sec_ctx_ex"> | ||||
<preamble> | ||||
Security Context Examples | ||||
</preamble> | ||||
<ttcol align="center">Context Type</ttcol> | ||||
<ttcol align="center">Parameters</ttcol> | ||||
<ttcol align="center">Definition</ttcol> | ||||
<c>Key Exchange AES</c> | ||||
<c>Encrypted Key, IV</c> | ||||
<c>AES-GCM-256 cipher suite with provided ephemeral key encrypted with | ||||
a predetermined key encryption key and clear text initialization vector.</c> | ||||
<c>Pre-shared Key AES</c> | ||||
<c>IV</c> | ||||
<c>AES-GCM-256 cipher suite with predetermined key and predetermined | ||||
key rotation policy.</c> | ||||
<c>Out of Band AES</c> | ||||
<c>None</c> | ||||
<c>AES-GCM-256 cipher suite with all info predetermined.</c> | ||||
</texttable> | ||||
</section> | ||||
<section title="Authorship"> | <table align="center" anchor="sec_ctx_ex"> | |||
<t> | <name>Security Context Examples</name> | |||
<thead> | ||||
<tr> | ||||
<th align="center">Context Type</th> | ||||
<th align="center">Parameters</th> | ||||
<th align="center">Definition</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="center">Key Exchange AES</td> | ||||
<td align="center">Encrypted Key, IV</td> | ||||
<td align="center">AES-GCM-256 cipher suite with | ||||
provided ephemeral key encrypted with a predetermined | ||||
key encryption key and cleartext initialization | ||||
vector.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">Pre-Shared Key AES</td> | ||||
<td align="center">IV</td> | ||||
<td align="center">AES-GCM-256 cipher suite with | ||||
predetermined key and predetermined key-rotation | ||||
policy.</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">Out-of-Band AES</td> | ||||
<td align="center">None</td> | ||||
<td align="center">AES-GCM-256 cipher suite with all | ||||
info predetermined.</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section numbered="true" toc="default"> | ||||
<name>Authorship</name> | ||||
<t> | ||||
Developers or implementers should consider the diverse | Developers or implementers should consider the diverse | |||
performance and conditions of networks on which the Bundle Protocol | performance and conditions of networks on which the Bundle | |||
(and therefore BPSec) will operate. Specifically, the delay and | Protocol (and, therefore, BPSec) will operate. Specifically, | |||
capacity of delay-tolerant networks can vary substantially. Developers | the delay and capacity of DTNs can vary | |||
should consider these conditions to better describe | substantially. Developers should consider these conditions to | |||
the conditions when those contexts will operate or exhibit | better describe the conditions in which those contexts will | |||
vulnerability, and selection of these contexts for implementation | operate or exhibit vulnerability, and selection of these | |||
should be made with consideration for this reality. There are key | contexts for implementation should be made with consideration | |||
differences that may limit the opportunity for a security context to le | for this reality. There are key differences that may limit | |||
verage existing | the opportunity for a security context to leverage existing | |||
cipher suites and technologies that have been developed for use in | cipher suites and technologies that have been developed for | |||
traditional, more reliable networks: | use in more reliable networks: | |||
<list style="symbols"> | </t> | |||
<t> | <dl spacing="normal"> | |||
Data Lifetime: Depending on the application environment, | <dt>Data Lifetime:</dt><dd>Depending on the application environment, | |||
bundles may persist on the network for extended periods of | bundles may persist on the network for extended periods of | |||
time, perhaps even years. Cryptographic algorithms should be | time, perhaps even years. Cryptographic algorithms should be | |||
selected to ensure protection of data against attacks for a | selected to ensure protection of data against attacks for a | |||
length of time reasonable for the application. | length of time reasonable for the application. | |||
</t> | </dd> | |||
<dt>One-Way Traffic:</dt><dd>Depending on the application | ||||
<t> | environment, it is possible that only a one-way connection | |||
One-Way Traffic: Depending on the application environment, it | may exist between two endpoints, or if a two-way connection | |||
is possible that only a one-way connection may exist between | does exist, the round-trip time may be extremely large. This | |||
two endpoints, or if a two-way connection does exist, the round- | may limit the utility of session key generation mechanisms, | |||
trip time may be extremely large. This may limit the utility | such as Diffie-Hellman, as a two-way handshake may not be | |||
of session key generation mechanisms, such as Diffie-Hellman, | feasible or reliable. | |||
as a two-way handshake may not be feasible or reliable. | </dd> | |||
</t> | <dt>Opportunistic Access:</dt><dd>Depending on the application environ | |||
ment, | ||||
<t> | ||||
Opportunistic Access: Depending on the application environment, | ||||
a given endpoint may not be guaranteed to be accessible within | a given endpoint may not be guaranteed to be accessible within | |||
a certain amount of time. This may make asymmetric | a certain amount of time. This may make asymmetric | |||
cryptographic architectures which rely on a key distribution | cryptographic architectures that rely on a key distribution | |||
center or other trust center impractical under certain | center or other trust center impractical under certain | |||
conditions. | conditions. | |||
</t> | </dd> | |||
</list> | </dl> | |||
</t> | <t> | |||
<t> | ||||
When developing security contexts for use with BPSec, the following | When developing security contexts for use with BPSec, the following | |||
information SHOULD be considered for inclusion in these specifications. | information <bcp14>SHOULD</bcp14> be considered for inclusion in these sp ecifications. | |||
<list style="symbols"> | </t> | |||
<t> | <dl spacing="normal"> | |||
Security Context Parameters. Security contexts MUST define | <dt>Security Context Parameters:</dt><dd>Security contexts | |||
their parameter Ids, the data types of those parameters, and | <bcp14>MUST</bcp14> define their parameter Ids, the data | |||
their CBOR encoding. | types of those parameters, and their CBOR encoding. | |||
</t> | </dd> | |||
<t> | <dt>Security Results:</dt><dd>Security contexts | |||
Security Results. Security contexts MUST define their security | <bcp14>MUST</bcp14> define their security result Ids, the | |||
result Ids, the data types of those results, and their CBOR | data types of those results, and their CBOR encoding. | |||
encoding. | </dd> | |||
</t> | <dt>New Canonicalizations:</dt><dd>Security contexts may | |||
<t> | define new canonicalization algorithms as necessary.</dd> | |||
New Canonicalizations. Security contexts may define new | ||||
canonicalization algorithms as necessary. | <dt>Ciphertext Size:</dt><dd><t>Security contexts | |||
<bcp14>MUST</bcp14> state whether their associated cipher | ||||
suites generate ciphertext (to include any authentication | ||||
information) that is of a different size than the input | ||||
plaintext. | ||||
</t> | </t> | |||
<t> | <t> | |||
Cipher-Text Size. Security contexts MUST state whether their | ||||
associated cipher suites generate cipher text (to include any | ||||
authentication information) that is of a different size than | ||||
the input plain text. | ||||
<vspace blankLines="1"/> | ||||
If a security context does not wish to alter the size of the | If a security context does not wish to alter the size of the | |||
plain text it should place overflow bytes and authentication tags | plaintext, it should place overflow bytes and authentication tags | |||
in security result fields. | in security result fields. | |||
</t> | </t> | |||
<t> | </dd> | |||
Block Header Information. Security contexts SHOULD include block | <dt>Block Header Information:</dt><dd>Security contexts | |||
header information that is considered to be immutable for the | <bcp14>SHOULD</bcp14> include block header information that | |||
block. This information MAY include the block type code, block nu | is considered to be immutable for the block. This | |||
mber, | information <bcp14>MAY</bcp14> include the block type code, | |||
CRC Type and CRC field (if present or if missing and unlikely to | block number, CRC type, and CRC field (if present or if | |||
be | missing and unlikely to be added later), and possibly | |||
added later), and possibly certain block processing control flags | certain block processing control flags. Designers should | |||
. | input these fields as additional data for integrity | |||
Designers should input these fields as additional data for integr | protection when these fields are expected to remain | |||
ity | unchanged over the path the block will take from the | |||
protection when these fields are expected to remain unchanged ove | security source to the security acceptor. Security contexts | |||
r the | considering block header information <bcp14>MUST</bcp14> | |||
path the block will take from the security source to the security | describe expected behavior when these fields fail their | |||
acceptor. | integrity verification. | |||
Security contexts considering block header information MUST descr | </dd> | |||
ibe | <dt>Handling CRC Fields:</dt><dd>Security contexts may | |||
expected behavior when these fields fail their integrity verifica | include algorithms that alter the contexts of their security | |||
tion. | target block, such as the case when encrypting the | |||
</t> | block-type-specific data of a target block as part of a BCB | |||
<t> | confidentiality service. Security context specifications | |||
Handling CRC Fields. Security contexts may include algorithms tha | <bcp14>SHOULD</bcp14> address how preexisting CRC type and | |||
t alter the | CRC value fields be handled. For example, a BCB security | |||
contexts of their security target block, such as the case when | context could remove the plaintext CRC value from its | |||
encrypting the block-type-specific data of a target block as part | target upon encryption and replace or recalculate the value | |||
oF | upon decryption. | |||
a BCB confidentiality service. Security context specifications SH | </dd> | |||
OULD | </dl> | |||
address how preexisting CRC-Type and CRC-Value fields be handled. | </section> | |||
For | </section> | |||
example, a BCB security context could remove the plain-text CRC v | <section anchor="Extensions" toc="default" numbered="true"> | |||
alue from | <name>Defining Other Security Blocks</name> | |||
its target upon encryption and replace or recalculate the value u | <t> | |||
pon decryption. | Other Security Blocks (OSBs) may be defined and used in addition to the | |||
</t> | security blocks identified in this specification. | |||
</list> | BIB, BCB, and any future OSBs can coexist within a bundle and can be | |||
</t> | considered in conformance with BPSec if all of the following requirements | |||
</section> | ||||
</section> | ||||
<section anchor="Extensions" title="Defining Other Security Blocks" toc="default | ||||
"> | ||||
<t> | ||||
Other security blocks (OSBs) may be defined and used in addition to the | ||||
security blocks identified in this specification. Both the usage of | ||||
BIB, BCB, and any future OSBs can co-exist within a bundle and can be | ||||
considered in conformance with BPSec if each of the following requirements | ||||
are met by any future identified security blocks. | are met by any future identified security blocks. | |||
</t> | ||||
<list style="symbols"> | <ul spacing="normal"> | |||
<t> | <li> | |||
Other security blocks (OSBs) MUST NOT reuse any enumerations | OSBs <bcp14>MUST NOT</bcp14> reuse any enumerations | |||
identified in this specification, to include the block type codes | identified in this specification, to include the block type codes | |||
for BIB and BCB. | for BIB and BCB. | |||
</t> | </li> | |||
<t> | <li> | |||
An OSB definition MUST state whether it can be the target of a BIB | An OSB definition <bcp14>MUST</bcp14> state whether it can | |||
or a BCB. The definition MUST also state whether the OSB can target | be the target of a BIB or a BCB. The definition | |||
<bcp14>MUST</bcp14> also state whether the OSB can target | ||||
a BIB or a BCB. | a BIB or a BCB. | |||
</t> | </li> | |||
<t> | <li> | |||
An OSB definition MUST provide a deterministic processing order in | An OSB definition <bcp14>MUST</bcp14> provide a | |||
the event that a bundle is received containing BIBs, BCBs, and OSBs. | deterministic processing order in the event that a bundle | |||
This processing order MUST NOT alter the BIB and BCB processing | is received containing BIBs, BCBs, and OSBs. This | |||
orders identified in this specification. | processing order <bcp14>MUST NOT</bcp14> alter the BIB and | |||
</t> | BCB processing orders identified in this specification. | |||
</li> | ||||
<t> | <li> | |||
An OSB definition MUST provide a canonicalization algorithm if the | An OSB definition <bcp14>MUST</bcp14> provide a | |||
default non-primary-block canonicalization algorithm cannot be used | canonicalization algorithm if the default algorithm for | |||
to generate a deterministic input for a cipher suite. This | non-primary-block canonicalization cannot be | |||
requirement can be waived if the OSB is defined so as to never be | used to generate a deterministic input for a cipher | |||
the security target of a BIB or a BCB. | suite. This requirement can be waived if the OSB is | |||
</t> | defined so as to never be the security target of a BIB or | |||
a BCB. | ||||
<t> | </li> | |||
An OSB definition MUST NOT require any behavior of a BPSEC-BPA that | <li> | |||
is in conflict with the behavior identified in this specification. | An OSB definition <bcp14>MUST NOT</bcp14> require any | |||
In particular, the security processing requirements imposed by this | behavior of a BPSec BPA that is in conflict with the | |||
specification must be consistent across all BPSEC-BPAs in a network. | behavior identified in this specification. In particular, | |||
</t> | the security processing requirements imposed by this | |||
specification must be consistent across all BPSec BPAs in | ||||
<t> | a network. | |||
The behavior of an OSB when dealing with fragmentation must be speci | </li> | |||
fied | <li> | |||
and MUST NOT lead to ambiguous processing states. In particular, an | The behavior of an OSB when dealing with fragmentation | |||
OSB definition should address how to receive and process an OSB in a | must be specified and <bcp14>MUST NOT</bcp14> lead to | |||
bundle fragment that may or may not also contain its security target | ambiguous processing states. In particular, an OSB | |||
. | definition should address how to receive and process an | |||
An OSB definition should also address whether an OSB may be added to | OSB in a bundle fragment that may or may not also contain | |||
a | its security target. An OSB definition should also | |||
bundle marked as a fragment. | address whether an OSB may be added to a bundle marked as | |||
</t> | a fragment. | |||
</list> | </li> | |||
</t> | </ul> | |||
<t> | ||||
Additionally, policy considerations for the management, monitoring, and | ||||
configuration associated with blocks SHOULD be included in any OSB definit | ||||
ion. | ||||
</t> | ||||
<t> | ||||
NOTE: The burden of showing compliance with processing rules is placed upo | ||||
n | ||||
the specifications defining new security blocks and the identification of | ||||
such blocks | ||||
shall not, alone, require maintenance of this specification. | ||||
</t> | ||||
</section> | ||||
<section anchor="IANA" title="IANA Considerations" toc="default"> | ||||
<t> | ||||
This specification includes fields requiring registries managed by | ||||
IANA. | ||||
</t> | ||||
<section anchor="BlockType" title="Bundle Block Types" toc="default"> | ||||
<t> | <t> | |||
This specification allocates two block types from the existing | Additionally, policy considerations for the management, | |||
"Bundle Block Types" registry defined in <xref target="RFC6255"/>. | monitoring, and configuration associated with blocks | |||
<bcp14>SHOULD</bcp14> be included in any OSB definition. | ||||
</t> | </t> | |||
<texttable align="center" anchor="iana_table"> | ||||
<preamble> | ||||
Additional Entries for the Bundle Block-Type Codes Registry: | ||||
</preamble> | ||||
<ttcol align="center">Value</ttcol> | ||||
<ttcol align="center">Description</ttcol> | ||||
<ttcol align="center">Reference</ttcol> | ||||
<c>TBA</c> | ||||
<c>Block Integrity Block</c> | ||||
<c>This document</c> | ||||
<c>TBA</c> | ||||
<c>Block Confidentiality Block</c> | ||||
<c>This document</c> | ||||
</texttable> | ||||
<t> | <t> | |||
The Bundle Block Types namespace notes whether a block type is | NOTE: The burden of showing compliance with processing rules is | |||
meant for use in BP version 6, BP version 7, or both. The two block ty | placed upon the specifications defining new security blocks, and | |||
pes | the identification of such blocks shall not, alone, require | |||
defined in this specification are meant for use with BP version 7. | maintenance of this specification. | |||
</t> | </t> | |||
</section> | ||||
</section> | <section anchor="IANA" toc="default" numbered="true"> | |||
<name>IANA Considerations</name> | ||||
<section anchor="secreasoncode" title="Bundle Status Report Reason Codes"> | ||||
<t> | <t> | |||
This specification allocates five reason codes from the existing | This specification includes fields that require registries managed by | |||
"Bundle Status Report Reason Codes" registry defined in <xref target="R | IANA. | |||
FC6255"/>. | ||||
</t> | </t> | |||
<section anchor="BlockType" toc="default" numbered="true"> | ||||
<name>Bundle Block Types</name> | ||||
<t> | ||||
This specification allocates two block types from the | ||||
existing "Bundle Block Types" registry defined in <xref | ||||
target="RFC6255" format="default"/>. | ||||
</t> | ||||
<texttable align="center"> | <table align="center" anchor="iana_table"> | |||
<preamble> | <name> Additional Entries for the "Bundle Block Types" Registry</name> | |||
Additional Entries for the Bundle Status Report Reason Codes Registr | <thead> | |||
y: | <tr> | |||
</preamble> | <th align="center">Value</th> | |||
<th align="center">Description</th> | ||||
<ttcol align="center">BP Version</ttcol> | <th align="center">Reference</th> | |||
<ttcol align="center">Value</ttcol> | </tr> | |||
<ttcol align="center">Description</ttcol> | </thead> | |||
<ttcol align="center">Reference</ttcol> | <tbody> | |||
<tr> | ||||
<c>7</c> | <td align="center">11</td> | |||
<c>TBD</c> | <td align="center">Block Integrity</td> | |||
<c>Missing Security Operation</c> | <td align="center">This document</td> | |||
<c>This document, Section <xref target="ReasonCodes"/> </c> | </tr> | |||
<tr> | ||||
<c>7</c> | <td align="center">12</td> | |||
<c>TBD</c> | <td align="center">Block Confidentiality</td> | |||
<c>Unknown Security Operation</c> | <td align="center">This document</td> | |||
<c>This document, Section <xref target="ReasonCodes"/></c> | </tr> | |||
</tbody> | ||||
<c>7</c> | </table> | |||
<c>TBD</c> | <t> | |||
<c>Unexpected Security Operation</c> | The "Bundle Block Types" registry notes whether a block type is | |||
<c>This document, Section <xref target="ReasonCodes"/></c> | meant for use in BP version 6, BP version 7 (BPv7), or both. The two b | |||
lock types | ||||
<c>7</c> | defined in this specification are meant for use with BPv7. | |||
<c>TBD</c> | </t> | |||
<c>Failed Security Operation</c> | </section> | |||
<c>This document, Section <xref target="ReasonCodes"/></c> | <section anchor="secreasoncode" numbered="true" toc="default"> | |||
<name>Bundle Status Report Reason Codes</name> | ||||
<c>7</c> | <t> | |||
<c>TBD</c> | This specification allocates five reason codes from the | |||
<c>Conflicting Security Operation</c> | existing "Bundle Status Report Reason Codes" registry defined | |||
<c>This document, Section <xref target="ReasonCodes"/></c> | in <xref target="RFC6255" format="default"/>. | |||
</t> | ||||
</texttable> | <table align="center"> | |||
</section> | <name> Additional Entries for the "Bundle Status Report Reason Codes" R | |||
egistry</name> | ||||
<section anchor="SecCtx" title="Security Context Identifiers"> | <thead> | |||
<tr> | ||||
<t> | <th align="center">BP Version</th> | |||
<th align="center">Value</th> | ||||
<th align="center">Description</th> | ||||
<th align="center">Reference</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="center">7</td> | ||||
<td align="center">12</td> | ||||
<td align="center">Missing security operation</td> | ||||
<td align="center">This document, <xref target="ReasonCodes" forma | ||||
t="default"/> </td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">7</td> | ||||
<td align="center">13</td> | ||||
<td align="center">Unknown security operation</td> | ||||
<td align="center">This document, <xref target="ReasonCodes" forma | ||||
t="default"/></td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">7</td> | ||||
<td align="center">14</td> | ||||
<td align="center">Unexpected security operation</td> | ||||
<td align="center">This document, <xref target="ReasonCodes" forma | ||||
t="default"/></td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">7</td> | ||||
<td align="center">15</td> | ||||
<td align="center">Failed security operation</td> | ||||
<td align="center">This document, <xref target="ReasonCodes" forma | ||||
t="default"/></td> | ||||
</tr> | ||||
<tr> | ||||
<td align="center">7</td> | ||||
<td align="center">16</td> | ||||
<td align="center">Conflicting security operation</td> | ||||
<td align="center">This document, <xref target="ReasonCodes" forma | ||||
t="default"/></td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
<section anchor="SecCtx" numbered="true" toc="default"> | ||||
<name>Security Context Identifiers</name> | ||||
<t> | ||||
BPSec has a Security Context Identifier field for which | BPSec has a Security Context Identifier field for which | |||
IANA is requested to create and maintain a new registry | IANA has created a new registry | |||
named "BPSec Security Context Identifiers". Initial values | named "BPSec Security Context Identifiers". Initial values | |||
for this registry are given below. | for this registry are given below. | |||
</t> | </t> | |||
<t> | ||||
<t> | The registration policy for this registry is Specification | |||
The registration policy for this registry is: Specification | Required (see <xref target="RFC8126" format="default"/>). | |||
Required. | </t> | |||
</t> | <t> | |||
The value range: signed 16-bit integer. | ||||
<t> | </t> | |||
The value range is: signed 16-bit integer. | <table align="center" anchor="sec_ctx_table"> | |||
</t> | <name>"BPSec Security Context Identifier" Registry</name> | |||
<thead> | ||||
<texttable align="center" anchor="sec_ctx_table"> | <tr> | |||
<preamble> | <th align="center">Value</th> | |||
BPSec Security Context Identifier Registry | <th align="center">Description</th> | |||
</preamble> | <th align="center">Reference</th> | |||
</tr> | ||||
<ttcol align="center">Value</ttcol> | </thead> | |||
<ttcol align="center">Description</ttcol> | <tbody> | |||
<ttcol align="center">Reference</ttcol> | <tr> | |||
<td align="center">< 0 </td> | ||||
<c>< 0 </c> | <td align="center">Reserved</td> | |||
<c>Reserved</c> | <td align="center">This document</td> | |||
<c>This document</c> | </tr> | |||
<tr> | ||||
<c>0</c> | <td align="center">0</td> | |||
<c>Reserved</c> | <td align="center">Reserved</td> | |||
<c>This document</c> | <td align="center">This document</td> | |||
</texttable> | </tr> | |||
</tbody> | ||||
<t> | </table> | |||
<t> | ||||
Negative security context identifiers are reserved for local/site-speci fic uses. | Negative security context identifiers are reserved for local/site-speci fic uses. | |||
The use of 0 as a security context identifier is for non-operational te | The use of 0 as a security context identifier is for nonoperational tes | |||
sting purposes only. | ting purposes only. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | ||||
</section> | </middle> | |||
<back> | ||||
</middle> | ||||
<back> | ||||
<references title="Normative References"> | ||||
&RFC3552; | ||||
&RFC8174; | ||||
&RFC2119; | ||||
&RFC8949; | ||||
&RFC6255; | ||||
<?rfc include="reference.I-D.draft-ietf-dtn-bpbis-31"?> | ||||
<reference anchor="I-D.ietf-dtn-bpsec-default-sc"> | ||||
<front> | ||||
<title> BPSec Default Security Contexts </title> | ||||
<author initials="E." surname="Birrane"> | ||||
</author> | ||||
<date month="February" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="Internet-Draft" value="draft-ietf-dtn-bpsec-default-sc-0 | ||||
1"/> | ||||
</reference> | ||||
</references> | ||||
<references title="Informative References"> | ||||
&RFC4838; | <references> | |||
&RFC6257; | <name>References</name> | |||
<references> | ||||
<name>Normative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.3552.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.2119.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8949.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6255.xml"/> | ||||
<?rfc include="reference.I-D.draft-birrane-dtn-sbsp-01"?> | <reference anchor='RFC9171' target='https://www.rfc-editor.org/info/rfc9171'> | |||
<front> | ||||
<title>Bundle Protocol Version 7</title> | ||||
<author initials='S' surname='Burleigh' fullname='Scott Burleigh'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='K' surname='Fall' fullname='Kevin Fall'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='E' surname='Birrane, III' fullname='Edward J. Birrane, III'> | ||||
<organization /> | ||||
</author> | ||||
<date month='January' year='2022' /> | ||||
</front> | ||||
<seriesInfo name="RFC" value="9171"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9171"/> | ||||
</reference> | ||||
</references> | <reference anchor='RFC9173' target='https://www.rfc-editor.org/info/rfc9173'> | |||
<front> | ||||
<title>Default Security Contexts for Bundle Protocol Security (BPSec)</title> | ||||
<author initials='E' surname='Birrane, III' fullname='Edward J. Birrane, III'> | ||||
<organization /> | ||||
</author> | ||||
<author fullname="Alex White" initials="A." surname="White"> | ||||
<organization /> | ||||
</author> | ||||
<author fullname="Sarah Heiner" initials="S." surname="Heiner"> | ||||
<organization /> | ||||
</author> | ||||
<date month='January' year='2022' /> | ||||
</front> | ||||
<seriesInfo name="RFC" value="9173"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC9173"/> | ||||
</reference> | ||||
<section anchor="contr" title="Acknowledgements" toc="default"> | </references> | |||
<t>The following participants contributed technical material, use cases, | <references> | |||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4838.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.6257.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8126.xml"/> | ||||
</references> | ||||
</references> | ||||
<section anchor="contr" toc="default" numbered="false"> | ||||
<name>Acknowledgments</name> | ||||
<t>The following participants contributed technical material, use cases, | ||||
and useful thoughts on the overall approach to this security | and useful thoughts on the overall approach to this security | |||
specification: Scott Burleigh of the Jet Propulsion Laboratory, | specification: <contact fullname="Scott Burleigh"/> of the IPNGROUP, <con | |||
Angela Hennessy of the Laboratory for Telecommunications | tact fullname="Angela Hennessy"/> of the Laboratory for Telecommunications | |||
Sciences, and Amy Alford, Angela Dalton, and Cherita Corbett of the Johns | Sciences, <contact fullname="Amy Alford"/> and <contact fullname="Cherita | |||
Hopkins | Corbett"/> of the Johns Hopkins | |||
University Applied Physics Laboratory.</t> | University Applied Physics Laboratory (JHU/APL), and <contact fullname="An | |||
</section> | gela Dalton"/> of AMD Research.</t> | |||
</back> | <t>Additionally, Benjamin Kaduk of Akamai Technologies provided a detailed | |||
technical review that resulted in a stronger and more precise specification. < | ||||
/t> | ||||
</section> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 238 change blocks. | ||||
2243 lines changed or deleted | 2148 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/ |