rfc9172v1.txt | rfc9172.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) E. Birrane, III | Internet Engineering Task Force (IETF) E. Birrane, III | |||
Request for Comments: 9172 K. McKeever | Request for Comments: 9172 K. McKeever | |||
Category: Standards Track JHU/APL | Category: Standards Track JHU/APL | |||
ISSN: 2070-1721 November 2021 | ISSN: 2070-1721 November 2021 | |||
Bundle Protocol Security Specification | Bundle Protocol Security (BPSec) | |||
Abstract | Abstract | |||
This document defines a security protocol providing data integrity | This document defines a security protocol providing data integrity | |||
and confidentiality services for the Bundle Protocol (BP). | and confidentiality services for the Bundle Protocol (BP). | |||
Status of This Memo | Status of This Memo | |||
This is an Internet Standards Track document. | This is an Internet Standards Track document. | |||
skipping to change at line 98 ¶ | skipping to change at line 98 ¶ | |||
9.2. Identification and Configuration | 9.2. Identification and Configuration | |||
9.3. Authorship | 9.3. Authorship | |||
10. Defining Other Security Blocks | 10. Defining Other Security Blocks | |||
11. IANA Considerations | 11. IANA Considerations | |||
11.1. Bundle Block Types | 11.1. Bundle Block Types | |||
11.2. Bundle Status Report Reason Codes | 11.2. Bundle Status Report Reason Codes | |||
11.3. Security Context Identifiers | 11.3. Security Context Identifiers | |||
12. References | 12. References | |||
12.1. Normative References | 12.1. Normative References | |||
12.2. Informative References | 12.2. Informative References | |||
Acknowledgements | Acknowledgments | |||
Authors' Addresses | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
This document defines security features for the Bundle Protocol (BP) | This document defines security features for the Bundle Protocol (BP) | |||
[RFC9171] and is intended for use in Delay-Tolerant Networks (DTNs) | [RFC9171] and is intended for use in Delay-Tolerant Networking (DTN) | |||
to provide security services between a security source and a security | to provide security services between a security source and a security | |||
acceptor. When the security source is the bundle source and the | acceptor. When the security source is the bundle source and the | |||
security acceptor is the bundle destination, the security service | security acceptor is the bundle destination, the security service | |||
provides end-to-end protection. | provides end-to-end protection. | |||
The Bundle Protocol specification [RFC9171] defines DTN as referring | The Bundle Protocol specification [RFC9171] defines DTN as referring | |||
to "a network architecture providing communications in and/or through | to "a network architecture providing communications in and/or through | |||
highly stressed environments" where "BP may be viewed as sitting at | highly stressed environments" where "BP may be viewed as sitting at | |||
the application layer of some number of constituent networks, forming | the application layer of some number of constituent networks, forming | |||
a store-carry-forward overlay network". The phrase "stressed | a store-carry-forward overlay network". The phrase "stressed | |||
environment" refers to multiple challenging conditions including | environment" refers to multiple challenging conditions including | |||
intermittent connectivity, large and/or variable delays, asymmetric | intermittent connectivity, large and/or variable delays, asymmetric | |||
data rates, and high bit error rates. | data rates, and high bit error rates. | |||
It should be presumed that the BP will be deployed such that the | It should be presumed that the BP will be deployed in an untrusted | |||
network cannot be trusted, posing the usual security challenges | network, which poses the usual security challenges related to | |||
related to confidentiality and integrity. However, the stressed | confidentiality and integrity. However, the stressed nature of the | |||
nature of the BP operating environment imposes unique conditions | BP operating environment imposes unique conditions where usual | |||
where usual transport security mechanisms may not be sufficient. For | transport security mechanisms may not be sufficient. For example, | |||
example, the store-carry-forward nature of the network may require | the store-carry-forward nature of the network may require protecting | |||
protecting data at rest, preventing unauthorized consumption of | data at rest, preventing unauthorized consumption of critical | |||
critical resources such as storage space, and operating without | resources such as storage space, and operating without regular | |||
regular contact with a centralized security oracle (such as a | contact with a centralized security oracle (such as a certificate | |||
certificate authority). | authority). | |||
An end-to-end security service that operates in all of the | An end-to-end security service that operates in all of the | |||
environments where the BP operates is needed. | environments where the BP operates is needed. | |||
1.1. Supported Security Services | 1.1. Supported Security Services | |||
BPSec provides integrity and confidentiality services for BP bundles, | BPSec provides integrity and confidentiality services for BP bundles, | |||
as defined in this section. | as defined in this section. | |||
Integrity services ensure that changes to target data within a bundle | Integrity services ensure that changes to target data within a bundle | |||
can be discovered. Data changes may be caused by processing errors, | can be discovered. Data changes may be caused by processing errors, | |||
environmental conditions, or intentional manipulation. In the | environmental conditions, or intentional manipulation. In the | |||
context of BPSec, integrity services apply to plain text in the | context of BPSec, integrity services apply to plaintext in the | |||
bundle. | bundle. | |||
Confidentiality services ensure that target data is unintelligible to | Confidentiality services ensure that target data is unintelligible to | |||
nodes in the DTN, except for authorized nodes possessing special | nodes in DTN, except for authorized nodes possessing special | |||
information. Generally, this means producing cipher text from plain | information. Generally, this means producing ciphertext from | |||
text and generating authentication information for that cipher text. | plaintext and generating authentication information for that | |||
In this context, confidentiality applies to the contents of target | ciphertext. In this context, confidentiality applies to the contents | |||
data and does not extend to hiding the fact that confidentiality | of target data and does not extend to hiding the fact that | |||
exists in the bundle. | confidentiality exists in the bundle. | |||
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: | |||
1. The term "hop-by-hop" is ambiguous in a BP overlay, as nodes that | 1. The term "hop-by-hop" is ambiguous in a BP overlay, as nodes that | |||
are adjacent in the overlay may not be adjacent in physical | are adjacent in the overlay may not be adjacent in physical | |||
connectivity. This condition is difficult or impossible to | connectivity. This condition is difficult or impossible to | |||
detect; therefore, hop-by-hop authentication is difficult or | detect; therefore, hop-by-hop authentication is difficult or | |||
impossible to enforce. | impossible to enforce. | |||
2. Hop-by-hop authentication cannot be deployed in a network if | 2. Hop-by-hop authentication cannot be deployed in a network if | |||
adjacent nodes in the network have incompatible security | adjacent nodes in the network have incompatible security | |||
capabilities. | capabilities. | |||
1.2. Specification Scope | 1.2. Specification Scope | |||
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 services | This includes the data specification for representing these services | |||
as BP extension blocks and the rules for adding, removing, and | as BP extension blocks and the rules for adding, removing, and | |||
processing these blocks at various points during the bundle's | processing these blocks at various points during the bundle's | |||
traversal of the DTN. | traversal of a delay-tolerant network. | |||
BPSec addresses only the security of data traveling over the DTN, not | BPSec addresses only the security of data traveling over the DTN, not | |||
the underlying DTN itself. Furthermore, while the BPSec protocol can | the underlying DTN itself. Furthermore, while the BPSec protocol can | |||
provide security-at-rest in a store-carry-forward network, it does | provide security-at-rest in a store-carry-forward network, it does | |||
not address threats that share computing resources with the DTN and/ | not address threats that share computing resources with the DTN and/ | |||
or BPSec software implementations. These threats may be malicious | or BPSec software implementations. These threats may be malicious | |||
software or compromised libraries that intend to intercept data or | software or compromised libraries that intend to intercept data or | |||
recover cryptographic material. Here, it is the responsibility of | recover cryptographic material. Here, it is the responsibility of | |||
the BPSec implementer to ensure that any cryptographic material, | the BPSec implementer to ensure that any cryptographic material, | |||
including shared secrets or private keys, is protected against access | including shared secrets or private keys, is protected against access | |||
within both memory and storage devices. | within both memory and storage devices. | |||
Completely trusted networks are extremely uncommon. Among untrusted | Completely trusted networks are extremely uncommon. Among untrusted | |||
networks, different networking conditions and operational | networks, different networking conditions and operational | |||
considerations require security mechanisms of varying strengths. | considerations require security mechanisms of varying strengths. | |||
Mandating a single security context may result in too much security | Mandating a single security context, which is a set of assumptions, | |||
for some networks and too little security in others. It is expected | algorithms, configurations, and policies used to implement security | |||
that separate documents will define different security contexts for | services, may result in too much security for some networks and too | |||
use in different networks. A set of default security contexts are | little security in others. Default security contexts are defined in | |||
defined in [RFC9173] and provide basic security services for | [RFC9173] to provide basic security services for interoperability | |||
interoperability testing and for operational use on the terrestrial | testing and for operational use on the terrestrial Internet. It is | |||
Internet. | expected that separate documents will define different security | |||
contexts for use in different networks. | ||||
This specification addresses neither the fitness of externally | This specification addresses neither the fitness of externally | |||
defined cryptographic methods nor the security of their | defined cryptographic methods nor the security of their | |||
implementation. | implementation. | |||
This specification does not address the implementation of security | This specification does not address the implementation of security | |||
policies and does not provide a security policy for the BPSec. | policies and does not provide a security policy for the BPSec. | |||
Similar to cipher suites, security policies are based on the nature | Similar to cipher suites, security policies are based on the nature | |||
and capabilities of individual networks and network operational | and capabilities of individual networks and network operational | |||
concepts. This specification does provide policy considerations when | concepts. This specification does provide policy considerations that | |||
building a security policy. | can be taken into account when building a security policy. | |||
With the exception of the Bundle Protocol, this specification does | With the exception of the Bundle Protocol, this specification does | |||
not address how to combine the BPSec security blocks with other | not address how to combine the BPSec security blocks with other | |||
protocols, other BP extension blocks, or other best practices to | protocols, other BP extension blocks, or other best practices to | |||
achieve security in any particular network implementation. | achieve security in any particular network implementation. | |||
1.3. Related Documents | 1.3. Related Documents | |||
This document is best read and understood within the context of the | This document is best read and understood within the context of the | |||
following other DTN documents: | following other DTN documents: | |||
* "Delay-Tolerant Networking Architecture" [RFC4838] defines the | * "Delay-Tolerant Networking Architecture" [RFC4838] defines the | |||
architecture for DTNs and identifies certain security assumptions | architecture for DTN and identifies certain security assumptions | |||
made by existing Internet protocols that are not valid in a DTN. | made by existing Internet protocols that are not valid in DTN. | |||
* "Bundle Protocol Version 7" [RFC9171] defines the format and | * "Bundle Protocol Version 7" [RFC9171] defines the format and | |||
processing of bundles, the extension block format used to | processing of bundles, the extension block format used to | |||
represent BPSec security blocks, and the canonical block structure | represent BPSec security blocks, and the canonical block structure | |||
used by this specification. | used by this specification. | |||
* "Concise Binary Object Representation (CBOR)" [RFC8949] defines a | * "Concise Binary Object Representation (CBOR)" [RFC8949] defines a | |||
data format that allows for small code size, fairly small message | data format that allows for small code size, fairly small message | |||
size, and extensibility without version negotiation. The block- | size, and extensibility without version negotiation. The block- | |||
specific-data associated with BPSec security blocks is encoded in | type-specific data associated with BPSec security blocks is | |||
this data format. | encoded in this data format. | |||
* "Bundle Security Protocol Specification" [RFC6257] and | * "Bundle Security Protocol Specification" [RFC6257] introduces the | |||
"Streamlined Bundle Security Protocol Specification" [DTN-SBSP] | concept of using BP extension blocks for security services in DTN. | |||
introduce the concept of using BP extension blocks for security | BPSec is a continuation and refinement of this document. | |||
services in a DTN. The BPSec is a continuation and refinement of | ||||
these documents. | ||||
1.4. Terminology | 1.4. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
This section defines terminology that either is unique to the BPSec | This section defines terminology that either is unique to the BPSec | |||
or is necessary for understanding the concepts defined in this | or is necessary for understanding the concepts defined in this | |||
specification. | specification. | |||
Bundle Destination: the node that receives a bundle and delivers the | Bundle Destination: the node that receives a bundle and delivers the | |||
payload of the bundle to an application. Also, the Node ID of the | payload of the bundle to an application. Also, the node ID of the | |||
Bundle Protocol Agent (BPA) receiving the bundle. The bundle | Bundle Protocol Agent (BPA) receiving the bundle. The bundle | |||
destination acts as the security acceptor for every security | destination acts as the security acceptor for every security | |||
target in every security block in every bundle it receives. | target in every security block in every bundle it receives. | |||
Bundle Source: the node that originates a bundle. Also, the Node ID | Bundle Source: the node that originates a bundle. Also, the node ID | |||
of the BPA originating the bundle. | of the BPA originating the bundle. | |||
Cipher Suite: a set of one or more algorithms providing integrity | Cipher Suite: a set of one or more algorithms providing integrity | |||
and/or confidentiality services. Cipher suites may define user | and/or confidentiality services. Cipher suites may define user | |||
parameters (e.g., secret keys to use), but they do not provide | parameters (e.g., secret keys to use), but they do not provide | |||
values for those parameters. | values for those parameters. | |||
Forwarder: any node that transmits a bundle in the DTN. Also, the | Forwarder: any node that transmits a bundle in DTN. Also, the node | |||
Node ID of the BPA that sent the bundle on its most recent hop. | ID of the BPA that sent the bundle on its most recent hop. | |||
Intermediate Receiver, Waypoint, or Next Hop: any node that receives | Intermediate Receiver, Waypoint, or Next Hop: any node that receives | |||
a bundle from a forwarder that is not the bundle destination. | a bundle from a forwarder that is not the bundle destination. | |||
Also, the Node ID of the BPA at any such node. | Also, the node ID of the BPA at any such node. | |||
Path: the ordered sequence of nodes through which a bundle passes on | Path: the ordered sequence of nodes through which a bundle passes on | |||
its way from source to destination. The path is not necessarily | its way from source to destination. The path is not necessarily | |||
known in advance by the bundle or any BPAs in the DTN. | known in advance by the bundle or any BPAs in DTN. | |||
Security Acceptor: a bundle node that processes and dispositions one | Security Acceptor: a bundle node that processes and dispositions one | |||
or more security blocks in a bundle. Security acceptors act as | or more security blocks in a bundle. Security acceptors act as | |||
the endpoint of a security service represented in a security | the endpoint of a security service represented in a security | |||
block. They remove the security blocks they act upon as part of | block. They remove the security blocks they act upon as part of | |||
processing and disposition. Also, the Node ID of that node. | processing and disposition. Also, the node ID of that node. | |||
Security Block: a BPSec extension block in a bundle. | Security Block: a BPSec extension block in a bundle. | |||
Security Context: the set of assumptions, algorithms, | Security Context: the set of assumptions, algorithms, | |||
configurations, and policies used to implement security services. | configurations, and policies used to implement security services. | |||
Security Operation: the application of a given security service to a | Security Operation: the application of a given security service to a | |||
security target, notated as OP(security service, security target). | security target, notated as OP(security service, security target). | |||
For example, OP(bcb-confidentiality, payload). Every security | For example, OP(bcb-confidentiality, payload). Every security | |||
operation in a bundle MUST be unique, meaning that a given | operation in a bundle MUST be unique, meaning that a given | |||
security service can only be applied to a security target once in | security service can only be applied to a security target once in | |||
a bundle. A security operation is implemented by a security | a bundle. A security operation is implemented by a security | |||
block. | block. | |||
Security Service: a process that gives some protection to a security | Security Service: a process that gives some protection to a security | |||
target. For example, this specification defines security services | target. For example, this specification defines security services | |||
for plain text integrity (bib-integrity) and authenticated plain | for plaintext integrity (bib-integrity) and authenticated | |||
text confidentiality with additional authenticated data (bcb- | plaintext confidentiality with additional authenticated data (bcb- | |||
confidentiality). | confidentiality). | |||
Security Source: a bundle node that adds a security block to a | Security Source: a bundle node that adds a security block to a | |||
bundle. Also, the Node ID of that node. | bundle. Also, the node ID of that node. | |||
Security Target: the block within a bundle that receives a security | Security Target: the block within a bundle that receives a security | |||
service as part of a security operation. | service as part of a security operation. | |||
Security Verifier: a bundle node that verifies the correctness of | Security Verifier: a bundle node that verifies the data integrity of | |||
one or more security blocks in a bundle. Unlike security | one or more security blocks in a bundle. Unlike security | |||
acceptors, security verifiers do not act as the endpoint of a | acceptors, security verifiers do not act as the endpoint of a | |||
security service, and they do not remove verified security blocks. | security service, and they do not remove verified security blocks. | |||
Also, the Node ID of that node. | Also, the node ID of that node. | |||
2. Design Decisions | 2. Design Decisions | |||
The application of security services in a DTN is a complex endeavor | The application of security services in DTN is a complex endeavor | |||
that must consider physical properties of the network (such as | that must consider physical properties of the network (such as | |||
connectivity and propagation times), policies at each node, | connectivity and propagation times), policies at each node, | |||
application security requirements, and current and future threat | application security requirements, and current and future threat | |||
environments. This section identifies those desirable properties | environments. This section identifies those desirable properties | |||
that guide design decisions for this specification and that are | that guide design decisions for this specification and that are | |||
necessary for understanding the format and behavior of the BPSec | necessary for understanding the format and behavior of the BPSec | |||
protocol. | protocol. | |||
2.1. Block-Level Granularity | 2.1. Block-Level Granularity | |||
skipping to change at line 352 ¶ | skipping to change at line 351 ¶ | |||
access to the payload. | access to the payload. | |||
2.2. Multiple Security Sources | 2.2. Multiple Security Sources | |||
A bundle can have multiple security blocks, and these blocks can have | A bundle can have multiple security blocks, and these blocks can have | |||
different security sources. BPSec implementations MUST NOT assume | different security sources. BPSec implementations MUST NOT assume | |||
that all blocks in a bundle have the same security operations applied | that all blocks in a bundle have the same security operations applied | |||
to them. | to them. | |||
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 adds a | at any time during its existence in DTN. When a waypoint adds a new | |||
new extension block to a bundle, that extension block MAY have | extension block to a bundle, that extension block MAY have security | |||
security services applied to it by that waypoint. Similarly, a | services applied to it by that waypoint. Similarly, a waypoint MAY | |||
waypoint MAY add a security service to an existing block, consistent | add a security service to an existing block, consistent with its | |||
with its security policy. | security policy. | |||
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) that | is the security source for that service. The security block(s) that | |||
represent that service in the bundle may need to record this security | represent that service in the bundle may need to record this security | |||
source, as the bundle destination might need this information for | source, as the bundle destination might need this information for | |||
processing. | processing. | |||
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 | |||
choose to apply a confidentiality service. In this case, the | the bundle and choose to apply a confidentiality service. In this | |||
integrity security source is the bundle source and the | case, the integrity security source is the bundle source and the | |||
confidentiality security source is the waypoint node. | confidentiality security source is the waypoint node. | |||
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 | |||
will reach the bundle destination prior to reaching a security | that the bundle will reach the bundle destination prior to reaching a | |||
acceptor. In cases where this may be a practical problem, it is | security acceptor. In cases where this may be a practical problem, | |||
recommended that solutions such as bundle encapsulation be used to | it is recommended that solutions such as bundle encapsulation be used | |||
ensure that a bundle be delivered to a security acceptor prior to | to ensure that a bundle be delivered to a security acceptor prior to | |||
being delivered to the bundle destination. Generally, if a bundle | being delivered to the bundle destination. Generally, if a bundle | |||
reaches a waypoint that has the appropriate configuration and policy | reaches a waypoint that has the appropriate configuration and policy | |||
to act as a security acceptor for a security service in the bundle, | to act as a security acceptor for a security service in the bundle, | |||
then the waypoint should act as that security acceptor. | then the waypoint should act as that security acceptor. | |||
2.3. Mixed Security Policy | 2.3. Mixed Security Policy | |||
The security policy enforced by nodes in the DTN may differ. | The security policy enforced by nodes in the delay-tolerant network | |||
may differ. | ||||
Some waypoints will have security policies that require evaluating | Some waypoints will have security policies that require the waypoint | |||
security services even if they are not the bundle destination or the | to evaluate security services even if the waypoint is neither the | |||
final intended acceptor of the service. For example, a waypoint | bundle destination nor the final intended acceptor of the service. | |||
could choose to verify an integrity service even though the waypoint | For example, a waypoint could choose to verify an integrity service | |||
is not the bundle destination and the integrity service will be | even though the waypoint is not the bundle destination and the | |||
needed by other nodes along the bundle's path. | integrity service will be needed by other nodes along the bundle's | |||
path. | ||||
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 will 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 attempt | it should verify and remove a particular integrity service or attempt | |||
to decrypt a confidentiality service, before forwarding the bundle | to decrypt a confidentiality service, before forwarding the bundle | |||
along its path. | along its path. | |||
Some waypoints could understand security blocks but refuse to process | Some waypoints could understand security blocks but refuse to process | |||
them unless they are the bundle destination. | them unless they are the bundle destination. | |||
2.4. User-Defined Security Contexts | 2.4. User-Defined Security Contexts | |||
A security context is the union of security algorithms (cipher | A security context is the set of assumptions, algorithms, | |||
suites), policies associated with the use of those algorithms, and | configurations, and policies used to implement security services. | |||
configuration values. Different contexts may specify different | Different contexts may specify different algorithms, different | |||
algorithms, different polices, or different configuration values used | polices, or different configuration values used in the implementation | |||
in the implementation of their security services. BPSec provides a | of their security services. BPSec provides a mechanism to define | |||
mechanism to define security contexts. Users may select from | security contexts. Users may select from registered security | |||
registered security contexts and customize those contexts through | contexts and customize those contexts through security context | |||
security context parameters. | parameters. | |||
For example, some users might prefer a SHA2 hash function for | For example, some users might prefer a SHA2 hash function for | |||
integrity, whereas other users might prefer a SHA3 hash function. | integrity, whereas other users might prefer a SHA3 hash function. | |||
Providing either separate security contexts or a single, | Providing either separate security contexts or a single, | |||
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 a | the desired cipher suite, policy, and configuration when populating a | |||
security block. | security block. | |||
2.5. Deterministic Processing | 2.5. Deterministic Processing | |||
skipping to change at line 441 ¶ | skipping to change at line 442 ¶ | |||
of security services, even when doing so results in a loss of | of security services, even when doing so results in a loss of | |||
flexibility. | flexibility. | |||
3. Security Blocks | 3. Security Blocks | |||
3.1. Block Definitions | 3.1. Block Definitions | |||
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). | |||
* The BIB is used to ensure the integrity of its plain text security | * The BIB is used to ensure the integrity of its plaintext security | |||
target(s). The integrity information in the BIB MAY be verified | target(s). The integrity information in the BIB MAY be verified | |||
by any node along the bundle path from the BIB security source to | by any node along the bundle path from the BIB security source to | |||
the bundle destination. Waypoints add or remove BIBs from bundles | the bundle destination. Waypoints add or remove BIBs from bundles | |||
in accordance with their security policy. BIBs are never used for | in accordance with their security policy. BIBs are never used for | |||
integrity protection of the cipher text provided by a BCB. | integrity protection of the ciphertext provided by a BCB. Because | |||
Because security policy at BPSec nodes may differ regarding | security policy at BPSec nodes may differ regarding integrity | |||
integrity verification, BIBs do not guarantee hop-by-hop | verification, BIBs do not guarantee hop-by-hop authentication, as | |||
authentication, as discussed in Section 1.1. | discussed in Section 1.1. | |||
* The BCB indicates that the security target or targets have been | * The BCB indicates that the security target or targets 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. As a matter of security policy, the BCB | content while in transit. As a matter of security policy, the BCB | |||
is decrypted by security acceptor nodes in the network, up to and | is decrypted by security acceptor nodes in the network, up to and | |||
including the bundle destination. BCBs additionally provide | including the bundle destination. BCBs additionally provide | |||
integrity protection mechanisms for the cipher text they generate. | integrity-protection mechanisms for the ciphertext they generate. | |||
3.2. Uniqueness | 3.2. Uniqueness | |||
Security operations in a bundle MUST be unique; the same security | Security operations in a bundle MUST be unique; the same security | |||
service MUST NOT be applied to a security target more than once in a | service MUST NOT be applied to a security target more than 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 | block, this means that multiple security blocks of the same type | |||
cannot share the same security targets. A new security block MUST | cannot share the same security targets. A new security block MUST | |||
NOT be added to a bundle if a preexisting security block of the same | NOT 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 | type is already defined for the security target of the new security | |||
skipping to change at line 512 ¶ | skipping to change at line 513 ¶ | |||
definition of the OSB, as discussed in Section 10. | definition of the OSB, as discussed in Section 10. | |||
NOTES: | NOTES: | |||
* A security block may be removed from a bundle as part of security | * A security block may be removed from a bundle as part of security | |||
processing at a waypoint node with a new security block being | processing at a waypoint node with a new security block being | |||
added to the bundle by that node. In this case, conflicting | added to the bundle by that node. In this case, conflicting | |||
security blocks never coexist in the bundle at the same time and | security blocks never coexist in the bundle at the same time and | |||
the uniqueness requirement is not violated. | the uniqueness requirement is not violated. | |||
* A cipher text integrity mechanism (such as associated | * A ciphertext integrity-protection mechanism (such as associated | |||
authenticated data) calculated by a cipher suite and transported | authenticated data) calculated by a cipher suite and transported | |||
in a BCB is considered part of the confidentiality service; | in a BCB is considered part of the confidentiality service; | |||
therefore, it is unique from the plain text integrity service | therefore, it is unique from the plaintext integrity service | |||
provided by a BIB. | provided by a BIB. | |||
* The security blocks defined in this specification (BIB and BCB) | * The security blocks defined in this specification (BIB and BCB) | |||
are designed with the intention that the BPA adding these blocks | are designed with the intention that the BPA adding these blocks | |||
is the authoritative source of the security service. If a BPA | is the authoritative source of the security service. If a BPA | |||
adds a BIB on a security target, then the BIB is expected to be | adds a BIB on a security target, then the BIB is expected to be | |||
the authoritative source of integrity for that security target. | the authoritative source of integrity for that security target. | |||
If a BPA adds a BCB to a security target, then the BCB is expected | If a BPA adds a BCB to a security target, then the BCB is expected | |||
to be the authoritative source of confidentiality for that | to be the authoritative source of confidentiality for that | |||
security target. More complex scenarios, such as having multiple | security target. More complex scenarios, such as having multiple | |||
skipping to change at line 578 ¶ | skipping to change at line 579 ¶ | |||
policy of the node itself. In cases where a receiving node | policy of the node itself. In cases where a receiving node | |||
determines that it is the security acceptor of only a subset of the | determines that it is the security acceptor of only a subset of the | |||
security operations in a security block, the node may choose to only | security operations in a security block, the node may choose to only | |||
process that subset of security operations. | process that subset of security operations. | |||
3.4. Target Identification | 3.4. Target Identification | |||
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 [RFC9171] provides a "Block Number" field | extension block header from [RFC9171] provides a "block number" field | |||
suitable for this purpose. Therefore, a security target in a | suitable for this purpose. Therefore, a security target in a | |||
security block MUST be represented as the Block Number of the target | security block MUST be represented as the block number of the target | |||
block. | block. | |||
3.5. Block Representation | 3.5. Block Representation | |||
Each security block uses the Canonical Bundle Block Format as defined | Each security block uses the Canonical Bundle Block Format as defined | |||
in [RFC9171]. That is, each security block is comprised of the | in [RFC9171]. That is, each security block is comprised of the | |||
following elements: | following elements: | |||
* block type code | * block type code | |||
* block number | * block number | |||
* block processing control flags | * block processing control flags | |||
* cyclic redundancy check (CRC) type | * cyclic redundancy check (CRC) type | |||
* block-type-specific-data | * block-type-specific data | |||
* CRC field (if present) | * CRC field (if present) | |||
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. | |||
3.6. Abstract Security Block | 3.6. Abstract Security Block | |||
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 its definition, its processing, and other constraints for | discusses its definition, its processing, and other constraints for | |||
using this structure. An ASB is never directly instantiated within a | using 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. | |||
The fields of the ASB SHALL be as follows, listed in the order in | The fields of the ASB SHALL be as follows, listed in the order in | |||
which they must appear. The encoding of these fields MUST be in | which they must appear. The encoding of these fields MUST be in | |||
accordance with the canonical forms provided in Section 4. | accordance with the canonical forms provided in Section 4. | |||
Security Targets: | Security Targets: | |||
This field identifies the block(s) targeted by the security | This field identifies the block(s) targeted by the security | |||
operation(s) represented by this security block. Each target | operation(s) represented by this security block. Each target | |||
block is represented by its unique Block Number. This field | block is represented by its unique block number. This field | |||
SHALL be represented by a Concise Binary Object Representation | SHALL be represented by a Concise Binary Object Representation | |||
(CBOR) array of data items. Each target within this CBOR array | (CBOR) array of data items. Each target within this CBOR array | |||
SHALL be represented by a CBOR unsigned integer. This array | SHALL be represented by a CBOR unsigned integer. This array | |||
MUST have at least one entry and each entry MUST represent the | MUST have at least one entry and each entry MUST represent the | |||
Block Number of a block that exists in the bundle. There MUST | block number of a block that exists in the bundle. There MUST | |||
NOT be duplicate entries in this array. The order of elements | NOT be duplicate entries in this array. The order of elements | |||
in this list has no semantic meaning outside of the context of | in this list has no semantic meaning outside of the context of | |||
this block. Within the block, the ordering of targets must | this block. Within the block, the ordering of targets must | |||
match the ordering of results associated with these targets. | match the ordering of results associated with these targets. | |||
Security Context Id: | Security Context Id: | |||
This field identifies the security context used to implement | This field identifies the security context used to implement | |||
the security service represented by this block and applied to | the security service represented by this block and applied to | |||
each security target. This field SHALL be represented by a | each security target. This field SHALL be represented by a | |||
CBOR unsigned integer. The values for this Id should come from | CBOR unsigned integer. The values for this Id should come from | |||
skipping to change at line 643 ¶ | skipping to change at line 644 ¶ | |||
Security Context Flags: | Security Context Flags: | |||
This field identifies which optional fields are present in the | This field identifies which optional fields are present in the | |||
security block. This field SHALL be represented as a CBOR | security block. This field SHALL be represented as a CBOR | |||
unsigned integer whose contents shall be interpreted as a bit | unsigned integer whose contents shall be interpreted as a bit | |||
field. Each bit in this bit field indicates the presence (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 | set to 1) or absence (bit set to 0) of optional data in the | |||
security block. The association of bits to security block data | security block. The association of bits to security block data | |||
is defined as follows. | is defined as follows. | |||
Bit 0 (the least-significant bit, 0x01): Security Context | Bit 0 (the least-significant bit, 0x01): "Security context | |||
Parameters Present Flag. | parameters present" flag. | |||
Bit >0 Reserved | Bit >0 Reserved | |||
Implementations MUST set reserved bits to 0 when writing this | Implementations MUST set reserved bits to 0 when writing this | |||
field and MUST ignore the values of reserved bits when reading | field and MUST ignore the values of reserved bits when reading | |||
this field. For unreserved bits, a value of 1 indicates that | this field. For unreserved bits, a value of 1 indicates that | |||
the associated security block field MUST be included in the | the associated security block field MUST be included in the | |||
security block. A value of 0 indicates that the associated | security block. A value of 0 indicates that the associated | |||
security block field MUST NOT be in the security block. | security block field MUST NOT be in the security block. | |||
Security Source: | Security Source: | |||
This field identifies the endpoint that inserted the security | This field identifies the bundle node that inserted the | |||
block in the bundle. This field SHALL be represented by a CBOR | security block in the bundle. Also, the node ID of that node. | |||
array in accordance with the rules in [RFC9171] for | This field SHALL be represented by a CBOR array in accordance | |||
representing Endpoint IDs (EIDs). | with the rules in [RFC9171] for representing endpoint IDs | |||
(EIDs). | ||||
Security Context Parameters (Optional): | Security Context Parameters (Optional): | |||
This field captures one or more security context parameters | This field captures one or more security context parameters | |||
that should be used when processing the security service | that should be used when processing the security service | |||
described by this security block. This field SHALL be | described by this security block. This field SHALL be | |||
represented by a CBOR array. Each entry in this array is a | represented by a CBOR array. Each entry in this array is a | |||
single security context parameter. A single parameter SHALL | single security context parameter. A single parameter SHALL | |||
also be represented as a CBOR array comprising a 2-tuple of the | also be represented as a CBOR array comprising a 2-tuple of the | |||
Id and value of the parameter, as follows. | Id and value of the parameter, as follows. | |||
skipping to change at line 706 ¶ | skipping to change at line 708 ¶ | |||
a specific security target. The target results MUST be ordered | a specific security target. The target results MUST be ordered | |||
identically to the Security Targets field of the security | identically to the Security Targets field of the security | |||
block. This means that the first set of target results in this | block. This means that the first set of target results in this | |||
array corresponds to the first entry in the Security Targets | array corresponds to the first entry in the Security Targets | |||
field of the security block, and so on. There MUST be one | field of the security block, and so on. There MUST be one | |||
entry in this array for each entry in the Security Targets | entry in this array for each entry in the Security Targets | |||
field of the security block. | field of the security block. | |||
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 | |||
defined as follows. | and a result value, defined as follows. | |||
Result Id: This field identifies which security result is | Result Id: This field identifies which security result is | |||
being specified. Some security results capture the primary | being specified. Some security results capture the primary | |||
output of a cipher suite. Other security results contain | output of a cipher suite. Other security results contain | |||
additional annotative information from cipher suite | additional annotative information from cipher suite | |||
processing. This field SHALL be represented as a CBOR | processing. This field SHALL be represented as a CBOR | |||
unsigned integer. Security result Ids will be as specified | unsigned integer. Security result Ids will be as specified | |||
in Section 3.10. | in Section 3.10. | |||
Result Value: This field captures the value associated with | Result Value: This field captures the value associated with | |||
skipping to change at line 739 ¶ | skipping to change at line 741 ¶ | |||
+----------+----+----------+ +---------------------------+ | +----------+----+----------+ +---------------------------+ | |||
| Result 1 | | Result M | ... | Result 1 | | Result K | | | Result 1 | | Result M | ... | Result 1 | | Result K | | |||
+----+-----+ .. +----+-----+ +---+------+ .. +----+------+ | +----+-----+ .. +----+-----+ +---+------+ .. +----+------+ | |||
| Id |Value| | Id |Value| | Id |Value| | Id | Value| | | Id |Value| | Id |Value| | Id |Value| | Id | Value| | |||
+----+-----+ +----+-----+ +----+-----+ +----+------+ | +----+-----+ +----+-----+ +----+-----+ +----+------+ | |||
Figure 2: Security Results | Figure 2: Security Results | |||
3.7. Block Integrity Block | 3.7. Block Integrity Block | |||
A BIB is a bundle extension block with the following characteristics. | A BIB is a BP extension block with the following characteristics. | |||
* The Block Type Code value is as specified in Section 11.1. | * The block type code value is as specified in Section 11.1. | |||
* The block-type-specific-data field follows the structure of the | * The block-type-specific data field follows the structure of the | |||
ASB. | ASB. | |||
* A security target listed in the Security Targets field MUST NOT | * A security target listed in the Security Targets field MUST NOT | |||
reference a security block defined in this specification (e.g., a | reference a security block defined in this specification (e.g., a | |||
BIB or a BCB). | BIB or a BCB). | |||
* The Security Context MUST utilize an authentication mechanism or | * The security context MUST utilize an authentication mechanism or | |||
an error detection mechanism. | an error detection mechanism. | |||
Notes: | Notes: | |||
* Designers SHOULD carefully consider the effect of setting flags | * Designers SHOULD carefully consider the effect of setting flags | |||
that either discard the block or delete the bundle in the event | that either discard the block or delete the bundle in the event | |||
that this block cannot be processed. | that this block cannot be processed. | |||
* 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 RECOMMENDED that users wishing to support | |||
multiple integrity mechanisms for the same target define a multi- | multiple integrity-protection mechanisms for the same target | |||
result security context. Such a context could generate multiple | define a multi-result security context. Such a context could | |||
security results for the same security target using different | generate multiple security results for the same security target | |||
integrity-protection mechanisms or different configurations for | using different integrity-protection mechanisms or different | |||
the same integrity-protection mechanism. | configurations for the same integrity-protection mechanism. | |||
* A BIB is used to verify the plain text integrity of its security | * A BIB is used to verify the plaintext integrity of its security | |||
target. However, a single BIB MAY include security results for | target. However, a single BIB MAY include security 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 | needed relationship between the BIB security target and other | |||
blocks in the bundle (such as the primary block). | blocks in the bundle (such as the primary block). | |||
* Security information MAY be checked at any hop on the way to the | * Security information MAY be checked at any hop on the way to the | |||
bundle destination that has access to the required keying | bundle destination that has access to the required keying | |||
information, in accordance with Section 3.9. | information, in accordance with Section 3.9. | |||
3.8. Block Confidentiality Block | 3.8. Block Confidentiality Block | |||
A BCB is a bundle extension block with the following characteristics. | A BCB is a BP extension block with the following characteristics. | |||
* The Block Type Code value is as specified in Section 11.1. | * The block type code value is as specified in Section 11.1. | |||
* The Block Processing Control flags value can be set to whatever | * The block processing control flags value can be set to whatever | |||
values are required by local policy with the following exceptions. | values are required by local policy with the following exceptions: | |||
BCB blocks MUST 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 cipher text. | ||||
BCB blocks MUST NOT 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. | ||||
* The block-type-specific-data fields follow the structure of the | - BCBs MUST 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. | ||||
- BCBs MUST NOT 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. | ||||
* The block-type-specific data fields follow the structure of the | ||||
ASB. | ASB. | |||
* A security target listed in the Security Targets field can | * A security target listed in the Security Targets field can | |||
reference the payload block, a non-security extension block, or a | reference the payload block, a non-security extension block, or a | |||
BIB. A BCB MUST NOT include another BCB as a security target. A | BIB. A BCB MUST NOT include another BCB as a security target. A | |||
BCB MUST NOT target the primary block. A BCB MUST NOT target a | BCB MUST NOT target the primary block. A BCB MUST NOT target a | |||
BIB block unless it shares a security target with that BIB block. | BIB unless it shares a security target with that BIB. | |||
* Any Security Context used by a BCB MUST utilize a confidentiality | * Any security context used by a BCB MUST utilize a confidentiality | |||
cipher that provides authenticated encryption with associated data | cipher that provides authenticated encryption with associated data | |||
(AEAD). | (AEAD). | |||
* Additional information created by a cipher suite (such as an | * Additional information created by a cipher suite (such as an | |||
authentication tag) can be placed either in a security result | authentication tag) can be placed either in a security result | |||
field or in the generated cipher text. The determination of where | field or in the generated ciphertext. The determination of where | |||
to place this information is a function of the cipher suite and | to place this information is a function of the cipher suite and | |||
security context used. | security context used. | |||
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. | |||
Notes: | Notes: | |||
* It is RECOMMENDED that designers carefully consider the effect of | * It is RECOMMENDED that designers carefully consider the effect of | |||
setting flags that delete the bundle in the event that this block | setting flags that delete the bundle in the event that this block | |||
cannot be processed. | cannot be processed. | |||
* 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 decision | setting of such flags should be an implementation/policy decision | |||
for the encrypting node. | for the encrypting node. | |||
3.9. Block Interactions | 3.9. Block Interactions | |||
The security block types defined in this specification are designed | The security block types defined in this specification are designed | |||
to be as independent as possible. However, there are some cases | to be as independent as possible. However, there are some cases | |||
where security blocks may share a security target creating processing | where security blocks may share a security target; this sharing | |||
dependencies. | creates processing dependencies. | |||
If a security target of a BCB is also a security target of a BIB, an | If a BCB and a BIB share a security target, an undesirable condition | |||
undesirable condition occurs where a waypoint would be unable to | occurs: a waypoint would be unable to validate the BIB because the | |||
validate the BIB because one of its security target's contents have | shared security target has been encrypted by the BCB. To address | |||
been encrypted by a BCB. To address this situation, the following | this situation, the following processing rules MUST be followed: | |||
processing rules MUST be followed: | ||||
* When adding a BCB to a bundle, if some (or all) of the security | * When adding a BCB to a bundle, if some (or all) of the security | |||
targets of the BCB match all of the security targets of an | targets of the BCB match all of the security targets of an | |||
existing BIB, then the existing BIB MUST also be encrypted. This | existing BIB, then the existing BIB MUST also be encrypted. This | |||
can be accomplished either by adding a new BCB that targets the | can be accomplished either by adding a new BCB that targets the | |||
existing BIB or by adding the BIB to the list of security targets | existing BIB or by adding the BIB to the list of security targets | |||
for the BCB. Deciding which way to represent this situation is a | for the BCB. Deciding which way to represent this situation is a | |||
matter of security policy. | matter of security policy. | |||
* When adding a BCB to a bundle, if some (or all) of the security | * When adding a BCB to a bundle, if some (or all) of the security | |||
skipping to change at line 871 ¶ | skipping to change at line 874 ¶ | |||
* A BIB MUST NOT be added for a security target that is already the | * A BIB MUST NOT be added for a security target that is already the | |||
security target of a BCB as this would cause ambiguity in block | security target of a BCB as this would cause ambiguity in block | |||
processing order. | processing order. | |||
* A BIB integrity value MUST NOT be checked if the BIB is the | * A BIB integrity value MUST NOT be checked if the BIB is the | |||
security target of an existing BCB. In this case, the BIB data is | security target of an existing BCB. In this case, the BIB data is | |||
encrypted. | encrypted. | |||
* A BIB integrity value MUST NOT be checked if the security target | * A BIB integrity value MUST NOT be checked if the security target | |||
associated with that value is also the security target of a BCB. | associated with that value is also the security target of a BCB. | |||
In such a case, the security target data contains cipher text as | In such a case, the security target data contains ciphertext as it | |||
it has been encrypted. | has been encrypted. | |||
* As mentioned in Section 3.7, a BIB MUST NOT have a BCB as its | * As mentioned in Section 3.7, a BIB MUST NOT have a BCB as its | |||
security target. | security target. | |||
These restrictions on block interactions impose a necessary ordering | These restrictions on block interactions impose a necessary ordering | |||
when applying security operations within a bundle. Specifically, for | when applying security operations within a bundle. Specifically, for | |||
a given security target, BIBs MUST be added before BCBs. This | a given security target, BIBs MUST be added before BCBs. This | |||
ordering MUST be preserved in cases where the current BPA is adding | ordering MUST be preserved in cases where the current BPA is adding | |||
all of the security blocks for the bundle or whether the BPA is a | all of the security blocks for the bundle or where the BPA is a | |||
waypoint adding new security blocks to a bundle that already contains | waypoint adding new security blocks to a bundle that already contains | |||
security blocks. | security blocks. | |||
In cases where a security source wishes to calculate both a plain | In cases where a security source wishes to calculate both a plaintext | |||
text integrity mechanism and encrypt a security target, a BCB with a | integrity-protection mechanism and encrypt a security target, a BCB | |||
security context that generates an integrity-protection mechanism as | with a security context that generates an integrity-protection | |||
one or more additional security results MUST be used instead of | mechanism as one or more additional security results MUST be used | |||
adding both a BIB and then a BCB for the security target at the | instead of adding both a BIB and then a BCB for the security target | |||
security source. | at the security source. | |||
3.10. Parameter and Result Identification | 3.10. Parameter and Result Identification | |||
Each security context MUST define its own context parameters and | Each security context MUST define its own context parameters and | |||
results. Each defined parameter and result is represented as the | results. Each defined parameter and result is represented as the | |||
tuple of an identifier and a value. Identifiers are always | tuple of an identifier and a value. Identifiers are always | |||
represented as a CBOR unsigned integer. The CBOR encoding of values | represented as a CBOR unsigned integer. The CBOR encoding of values | |||
is as defined by the security context specification. | is as defined by the security context specification. | |||
Identifiers MUST be unique for a given security context but do not | Identifiers MUST be unique for a given security context but do not | |||
skipping to change at line 912 ¶ | skipping to change at line 915 ¶ | |||
An example of a security context can be found in [RFC9173]. | An example of a security context can be found in [RFC9173]. | |||
3.11. BPSec Block Examples | 3.11. BPSec Block Examples | |||
This section provides two examples of BPSec blocks applied to | This section provides two examples of BPSec blocks applied to | |||
bundles. In the first example, a single node adds several security | bundles. In the first example, a single node adds several security | |||
operations to a bundle. In the second example, a waypoint node | operations to a bundle. In the second example, a waypoint node | |||
received the bundle created in the first example and adds additional | received the bundle created in the first example and adds additional | |||
security operations. In both examples, the first column represents | security operations. In both examples, the first column represents | |||
blocks within a bundle and the second column represents the Block | blocks within a bundle and the second column represents the block | |||
Number for the block, using the terminology B1...Bn for the purpose | number for the block, using the terminology B1...Bn for the purpose | |||
of illustration. | of illustration. | |||
3.11.1. Example 1: Constructing a Bundle with Security | 3.11.1. Example 1: Constructing a Bundle with Security | |||
In this example, a bundle has four non-security-related blocks: the | In this example, a bundle has four non-security-related blocks: the | |||
primary block (B1), two extension blocks (B4, B5), and a payload | primary block (B1), two extension blocks (B4, B5), and a payload | |||
block (B6). The bundle source wishes to provide an integrity | block (B6). The bundle source wishes to provide an integrity | |||
signature of the plain text associated with the primary block, the | signature of the plaintext associated with the primary block, the | |||
second extension block, and the payload. The bundle source also | second extension block, and the payload. The bundle source also | |||
wishes to provide confidentiality for the first extension block. The | wishes to provide confidentiality for the first extension block. The | |||
resultant bundle is illustrated in Figure 3 and the security actions | resultant bundle is illustrated in Figure 3 and the security actions | |||
are described below. | are described below. | |||
Block in Bundle ID | Block in Bundle ID | |||
+==========================================+====+ | +==========================================+====+ | |||
| Primary Block | B1 | | | Primary Block | B1 | | |||
+------------------------------------------+----+ | +------------------------------------------+----+ | |||
| BIB | B2 | | | BIB | B2 | | |||
skipping to change at line 950 ¶ | skipping to change at line 953 ¶ | |||
+------------------------------------------+----+ | +------------------------------------------+----+ | |||
| Payload Block | B6 | | | Payload Block | B6 | | |||
+------------------------------------------+----+ | +------------------------------------------+----+ | |||
Figure 3: Security at Bundle Creation | Figure 3: Security at Bundle Creation | |||
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. | |||
* 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-specific- | primary block (B1), the canonical form of the block-type-specific | |||
data field of the second extension block (B5), and the canonical | data field of the second extension block (B5), and the canonical | |||
form of the payload block (B6). This is accomplished by a single | form of the payload block (B6). This is accomplished by a single | |||
BIB (B2) with multiple targets. A single BIB is used in this case | BIB (B2) 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 the | context, and security context parameters. Had this not been the | |||
case, multiple BIBs could have been added instead. | case, multiple BIBs could have been added instead. | |||
* 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- | accomplished by a BCB (B3). Once applied, the block-type-specific | |||
specific-data field of extension block B4 is encrypted. The BCB | data field of extension block B4 is encrypted. The BCB MUST hold | |||
MUST hold an authentication tag for the cipher text either in the | an authentication tag for the ciphertext either in the ciphertext | |||
cipher text that now populates the first extension block or as a | that now populates the first extension block or as a security | |||
security result in the BCB itself, depending on which security | result in the BCB itself, depending on which security context is | |||
context is used to form the BCB. A plain text integrity signature | used to form the BCB. A plaintext integrity signature may also | |||
may also exist as a security result in the BCB if one is provided | exist as a security result in the BCB if one is provided by the | |||
by the selected confidentiality security context. | selected confidentiality security context. | |||
3.11.2. Example 2: Adding More Security at a New Node | 3.11.2. Example 2: Adding More Security at a New Node | |||
Consider that the bundle as it is illustrated in Figure 3 is now | Consider that the bundle as it is illustrated in Figure 3 is now | |||
received by a waypoint node that wishes to encrypt the second | received by a waypoint node that wishes to encrypt the second | |||
extension block and the bundle payload. The waypoint security policy | extension block and the bundle payload. The waypoint security policy | |||
is to allow existing BIBs for these blocks to persist, as they may be | is to allow existing BIBs for these blocks to persist, as they may be | |||
required as part of the security policy at the bundle destination. | required as part of the security policy at the bundle destination. | |||
The resultant bundle is illustrated in Figure 4 and the security | The resultant bundle is illustrated in Figure 4 and the security | |||
skipping to change at line 1010 ¶ | skipping to change at line 1013 ¶ | |||
| Extension Block (encrypted) | B5 | | | Extension Block (encrypted) | B5 | | |||
+------------------------------------------+----+ | +------------------------------------------+----+ | |||
| Payload Block (encrypted) | B6 | | | Payload Block (encrypted) | B6 | | |||
+------------------------------------------+----+ | +------------------------------------------+----+ | |||
Figure 4: Security at Bundle Forwarding | Figure 4: Security at Bundle Forwarding | |||
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. | |||
* Since the waypoint node wishes to encrypt the block-type-specific- | * Since the waypoint node wishes to encrypt the block-type-specific | |||
data field of blocks B5 and B6, it MUST also encrypt the block- | data field of blocks B5 and B6, it MUST also encrypt the block- | |||
type-specific-data field of the BIBs providing plain text | type-specific data field of the BIBs providing plaintext integrity | |||
integrity over those blocks. However, BIB B2 could not be | over those blocks. However, BIB B2 could not be encrypted in its | |||
encrypted in its entirety because it also held a signature for the | entirety because it also held a signature for the primary block | |||
primary block (B1). Therefore, a new BIB (B7) is created and | (B1). Therefore, a new BIB (B7) is created and security results | |||
security results associated with B5 and B6 are moved out of BIB B2 | associated with B5 and B6 are moved out of BIB B2 and into BIB B7. | |||
and into BIB B7. | ||||
* Now that there is no longer confusion about 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 block | bundle with the security targets being the second extension block | |||
(B5) and the payload (B6) as well as the newly created BIB holding | (B5) and the payload (B6) as well as the newly created BIB holding | |||
their plain text integrity signatures (B7). A single new BCB is | their plaintext integrity signatures (B7). A single new BCB is | |||
used in this case because all three targets share a security | used in this case because all three targets share a security | |||
source, security context, and security context parameters. Had | source, security context, and security context parameters. Had | |||
this not been the case, multiple BCBs could have been added | this not been the case, multiple BCBs could have been added | |||
instead. | instead. | |||
4. Canonical Forms | 4. Canonical Forms | |||
Security services require consistency and determinism in how | Security services require consistency and determinism in how | |||
information is presented to cipher suites at security sources, | information is presented to cipher suites at security sources, | |||
verifiers, and acceptors. For example, integrity services require | verifiers, and acceptors. For example, integrity services require | |||
skipping to change at line 1047 ¶ | skipping to change at line 1049 ¶ | |||
algorithms transcode the contents of a security target into a | algorithms transcode the contents of a security target into a | |||
canonical form. | canonical form. | |||
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 | 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 | are unchanged, then the canonical form of that target will be the | |||
same even if the encoding of those values for wire transmission is | same even if the encoding of those values for wire transmission is | |||
different. | different. | |||
BPSec operates on data fields within bundle blocks (e.g., the block- | BPSec operates on data fields within bundle blocks (e.g., the block- | |||
type-specific-data field). In their canonical form, these fields | type-specific data field). In their canonical form, these fields | |||
MUST include their own CBOR encoding and MUST NOT include any other | MUST include their own CBOR encoding and MUST NOT include any other | |||
encapsulating CBOR encoding. For example, the canonical form of the | encapsulating CBOR encoding. For example, the canonical form of the | |||
block-type-specific-data field is a CBOR byte string existing within | block-type-specific data field is a CBOR byte string existing within | |||
the CBOR array containing the fields of the extension block. The | the CBOR array containing the fields of the extension block. The | |||
entire CBOR byte string is considered the canonical block-type- | entire CBOR byte string is considered the canonical block-type- | |||
specific-data field. The CBOR array framing is not considered part | specific data field. The CBOR array framing is not considered part | |||
of the field. | of the field. | |||
The canonical form of the primary block is as specified in [RFC9171] | The canonical form of the primary block is as specified in [RFC9171] | |||
with the following constraint. | with the following constraint. | |||
* CBOR values from the primary block MUST be canonicalized using the | * CBOR values from the primary block MUST be canonicalized using the | |||
rules for Deterministically Encoded CBOR, as specified in | rules for Deterministically Encoded CBOR, as specified in | |||
[RFC8949]. | [RFC8949]. | |||
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 [RFC9171] with the following | canonicalized as specified in [RFC9171] with the following | |||
constraints. | constraints. | |||
* CBOR values from the non-primary block MUST be canonicalized using | * CBOR values from the non-primary block MUST be canonicalized using | |||
the rules for Deterministically Encoded CBOR, as specified in | the rules for Deterministically Encoded CBOR, as specified in | |||
[RFC8949]. | [RFC8949]. | |||
* Only the block-type-specific-data field may be provided to a | * Only the block-type-specific data field may be provided to a | |||
cipher suite for encryption as part of a confidentiality security | cipher suite for encryption as part of a confidentiality security | |||
service. Other fields within a non-primary block MUST NOT be | service. Other fields within a non-primary block MUST NOT be | |||
encrypted or decrypted and MUST NOT be included in the canonical | encrypted or decrypted and MUST NOT be included in the canonical | |||
form used by the cipher suite for encryption and decryption. | form used by the cipher suite for encryption and decryption. An | |||
These other fields MAY have an integrity protection mechanism | integrity-protection mechanism MAY be applied to these other | |||
applied to them by treating them as associated authenticated data. | fields as supported by the security context. For example, these | |||
fields might be treated as associated authenticated data. | ||||
* Reserved and unassigned flags in the block processing control | * Reserved and unassigned flags in the block processing control | |||
flags field MUST be set to 0 in a canonical form as it is not | flags field MUST be set to 0 in a canonical form as it is not | |||
known if those flags will change in transit. | known if those flags will change in transit. | |||
Security contexts MAY define their own canonicalization algorithms | Security contexts MAY define their own canonicalization algorithms | |||
and require the use of those algorithms over the ones provided in | and require the use of those algorithms over the ones provided in | |||
this specification. In the event of conflicting canonicalization | this specification. In the event of conflicting canonicalization | |||
algorithms, algorithms defined in a security context take precedence | algorithms, algorithms defined in a security context take precedence | |||
over this specification when constructing canonical forms for that | over this specification when constructing canonical forms for that | |||
skipping to change at line 1129 ¶ | skipping to change at line 1132 ¶ | |||
If the security policy of a node specifies that a node should have | If the security policy of a node specifies that a node should have | |||
applied confidentiality to a specific security target and no such BCB | applied confidentiality to a specific security target and no such BCB | |||
is present in the bundle, then the node MUST process this security | is present in the bundle, then the node MUST process this security | |||
target in accordance with the security policy. It is RECOMMENDED | target in accordance with the security policy. It is RECOMMENDED | |||
that the node remove the security target from the bundle because the | that the node remove the security target from the bundle because the | |||
confidentiality (and possibly the integrity) of the security target | confidentiality (and possibly the integrity) of the security target | |||
cannot be guaranteed. If the removed security target is the payload | cannot be guaranteed. If the removed security target is the payload | |||
block, the bundle MUST be discarded. | block, the bundle MUST be discarded. | |||
If an encrypted payload block cannot be decrypted (i.e., the cipher | If an encrypted payload block cannot be decrypted (i.e., the | |||
text cannot be authenticated), then the bundle MUST be discarded and | ciphertext cannot be authenticated), then the bundle MUST be | |||
processed no further. If an encrypted security target other than the | discarded and processed no further. If an encrypted security target | |||
payload block cannot be decrypted, then the associated security | other than the payload block cannot be decrypted, then the associated | |||
target and all security blocks associated with that target MUST be | security target and all security blocks associated with that target | |||
discarded and processed no further. In both cases, requested status | MUST be discarded and processed no further. In both cases, requested | |||
reports (see [RFC9171]) MAY be generated to reflect bundle or block | status reports (see [RFC9171]) MAY be generated to reflect bundle or | |||
deletion. | block deletion. | |||
When a BCB is decrypted, the recovered plain text for each security | When a BCB is decrypted, the recovered plaintext for each security | |||
target MUST replace the cipher text in each of the security targets' | target MUST replace the ciphertext in each of the security targets' | |||
block-type-specific-data fields. If the plain text is of a different | block-type-specific data fields. If the plaintext is of a different | |||
size than the cipher text, the framing of the CBOR byte string of | size than the ciphertext, the framing of the CBOR byte string of this | |||
this field must be updated to ensure this field remains a valid CBOR | field must be updated to ensure this field remains a valid CBOR byte | |||
byte string. The length of the recovered plain text is known by the | string. The length of the recovered plaintext is known by the | |||
decrypting security context. | decrypting security context. | |||
If a BCB contains multiple security operations, each operation | If a BCB contains multiple security operations, each operation | |||
processed by the node MUST be treated as if the security operation | processed by the node MUST be treated as if the security operation | |||
has been represented by a single BCB with a single security operation | has been represented by a single BCB with a single security operation | |||
for the purposes of report generation and policy processing. | for the purposes of report generation and policy processing. | |||
5.1.2. Receiving BIBs | 5.1.2. Receiving BIBs | |||
If a received bundle contains a BIB, the receiving node MUST | If a received bundle contains a BIB, the receiving node MUST | |||
skipping to change at line 1186 ¶ | skipping to change at line 1189 ¶ | |||
that the node remove the security target from the bundle if the | that the node remove the security target from the bundle if the | |||
security target is not the payload or primary block. If the security | security target is not the payload or primary block. If the security | |||
target is the payload or primary block, the bundle MAY be discarded. | target is the payload or primary block, the bundle MAY be discarded. | |||
This action can occur at any node that has the ability to verify an | This action can occur at any node that has the ability to verify an | |||
integrity signature, not just the bundle destination. | integrity signature, not just the bundle destination. | |||
If a receiving node is not the security acceptor of a security | If a receiving node is not the security acceptor of a security | |||
operation in a BIB, it MAY attempt to verify the security operation | operation in a BIB, it MAY attempt to verify the security operation | |||
anyway to prevent forwarding corrupt data. If the verification | anyway to prevent forwarding corrupt data. If the verification | |||
fails, the node SHALL process the security target in accordance with | fails, the node SHALL process the security target in accordance with | |||
local security policy. It is RECOMMENDED that if a payload integrity | local security policy. If a payload integrity check fails at a | |||
check fails at a waypoint that it is processed in the same way as if | waypoint, it is RECOMMENDED that it be processed in the same way as a | |||
the check fails at the bundle destination. If the check passes, the | failure of a payload integrity check at the bundle destination. If | |||
node MUST NOT remove the security operation from the BIB prior to | the check passes, the node MUST NOT remove the security operation | |||
forwarding. | from the BIB prior to forwarding. | |||
If a BIB contains multiple security operations, each operation | If a BIB contains multiple security operations, each operation | |||
processed by the node MUST be treated as if the security operation | processed by the node MUST be treated as if the security operation | |||
has been represented by a single BIB with a single security operation | has been represented by a single BIB with a single security operation | |||
for the purposes of report generation and policy processing. | for the purposes of report generation and policy processing. | |||
5.2. Bundle Fragmentation and Reassembly | 5.2. Bundle Fragmentation and Reassembly | |||
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 [RFC9171] MUST be followed. As defined there and | rules described in [RFC9171] MUST be followed. As defined there and | |||
summarized here for completeness, only the payload block can be | summarized here for completeness, only the payload block can be | |||
fragmented; security blocks, like all extension blocks, can never be | fragmented; security blocks, like all extension blocks, can never be | |||
fragmented. | fragmented. | |||
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 MUST NOT be | |||
added to a bundle if the "Bundle is a fragment" flag is set in the | added to a bundle if the "Bundle is a fragment" flag is set in the | |||
Bundle Processing Control Flags field. | bundle processing control flags field. | |||
Security processing in the presence of payload-block fragmentation | Security processing in the presence of payload-block fragmentation | |||
may be handled by other mechanisms outside of the BPSec protocol or | may 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 protection prior | mechanism. A node should apply any confidentiality protection prior | |||
to performing any fragmentation. | to performing any fragmentation. | |||
6. Key Management | 6. Key Management | |||
There exists a myriad of ways to establish, communicate, and | There exists a myriad of ways to establish, communicate, and | |||
otherwise manage key information in a DTN. Certain DTN deployments | otherwise manage key information in DTN. Certain DTN deployments | |||
might follow established protocols for key management, whereas other | might follow established protocols for key management, whereas other | |||
DTN deployments might require new and novel approaches. BPSec | DTN deployments might require new and novel approaches. BPSec | |||
assumes that key management is handled as a separate part of network | assumes that key management is handled as a separate part of network | |||
management; this specification neither defines nor requires a | management; this specification neither defines nor requires a | |||
specific strategy for key management. | specific strategy for key management. | |||
7. Security Policy Considerations | 7. Security Policy Considerations | |||
When implementing BPSec, several policy decisions must be considered. | When implementing BPSec, several policy decisions must be considered. | |||
This section describes key policies that affect the generation, | This section describes key policies that affect the generation, | |||
skipping to change at line 1256 ¶ | skipping to change at line 1259 ¶ | |||
information related to the bundle. | information related to the bundle. | |||
* If a waypoint has been configured to add a security operation to a | * If a waypoint has been configured to add a security operation to a | |||
bundle, and the received bundle already has the security operation | bundle, and the received bundle already has the security operation | |||
applied, then the receiver must understand what to do. The | applied, then the receiver must understand what to do. The | |||
receiver may discard the bundle, discard the security target and | receiver may discard the bundle, discard the security target and | |||
associated BPSec blocks, replace the security operation, or take | associated BPSec blocks, replace the security operation, or take | |||
some other action. | some other action. | |||
* It is RECOMMENDED that security operations be applied to every | * It is RECOMMENDED that security operations be applied to every | |||
block in a bundle and that the default behavior of a bundle agent | block in a bundle and that the default behavior of a BPA be to use | |||
be to use the security services defined in this specification. | the security services defined in this specification. Designers | |||
Designers should only deviate from the use of security operations | should only deviate from the use of security operations when the | |||
when the deviation can be justified -- such as when doing so | deviation can be justified -- such as when doing so causes | |||
causes downstream errors when processing blocks whose contents | downstream errors when processing blocks whose contents must be | |||
must be inspected or changed at one or more hops along the path. | inspected or changed at one or more hops along the path. | |||
* BCB security contexts can alter the size of extension blocks and | * BCB security contexts can alter the size of extension blocks and | |||
the payload block. Security policy SHOULD consider how changes to | the payload block. Security policy SHOULD consider how changes to | |||
the size of a block could negatively effect bundle processing | the size of a block could negatively effect bundle processing | |||
(e.g., calculating storage needs and scheduling transmission | (e.g., calculating storage needs and scheduling transmission | |||
times). | times). | |||
* 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. | |||
1. At the time of encryption, a security context can be selected | 1. At the time of encryption, a security context can be selected | |||
that computes a plain text integrity-protection mechanism that | that computes a plaintext integrity-protection mechanism that | |||
is included as a security context result field. | is included as a security context result field. | |||
2. The encrypted block may be replicated as a new block with a | 2. The encrypted block may be replicated as a new block with a | |||
new block number and may be given integrity protection. | new block number and may be given integrity protection. | |||
3. An encapsulation scheme may be applied to encapsulate the | 3. 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 a | target of a BCB and may therefore be the security target of a | |||
BIB. | BIB. | |||
* Security policy SHOULD address whether cipher suites whose cipher | * Security policy SHOULD address whether cipher suites whose | |||
text is larger than the initial plain text are permitted and, if | ciphertext is larger than the initial plaintext are permitted and, | |||
so, for what types of blocks. Changing the size of a block may | if so, for what types of blocks. Changing the size of a block may | |||
cause processing difficulties for networks that calculate block | cause processing difficulties for networks that calculate block | |||
offsets into bundles or predict transmission times or storage | offsets into bundles or predict transmission times or storage | |||
availability as a function of bundle size. In other cases, | availability as a function of bundle size. In other cases, | |||
changing the size of a payload as part of encryption has no | changing the size of a payload as part of encryption has no | |||
significant impact. | significant impact. | |||
7.1. Security Reason Codes | 7.1. Security Reason Codes | |||
Bundle Protocol Agents (BPAs) must process blocks and bundles in | BPAs must process blocks and bundles in accordance with both BP | |||
accordance with both BP policy and BPSec policy. The decision to | policy and BPSec policy. The decision to receive, forward, deliver, | |||
receive, forward, deliver, or delete a bundle may be communicated to | or delete a bundle may be communicated to the report-to address of | |||
the report-to address of the bundle in the form of a status report, | the bundle in the form of a status report, as a method of tracking | |||
as a method of tracking the progress of the bundle through the | the progress of the bundle through the network. The status report | |||
network. The status report for a bundle may be augmented with a | for a bundle may be augmented with a "reason code" explaining why the | |||
"reason code" explaining why the particular action was taken on the | particular action was taken on the bundle. | |||
bundle. | ||||
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- | security processing of a bundle. The communication of security- | |||
related status reports might reduce the security of a network if | related status reports might reduce the security of a network if | |||
these reports are intercepted by unintended recipients. BPSec policy | these reports are intercepted by unintended recipients. BPSec policy | |||
SHOULD specify the conditions in which sending security reason codes | SHOULD specify the conditions in which sending security reason codes | |||
are appropriate. Examples of appropriate conditions for the use of | are appropriate. Examples of appropriate conditions for the use of | |||
security reason codes could include the following. | security reason codes could include the following. | |||
* When the report-to address is verified as unchanged from the | * When the report-to address is verified as unchanged from the | |||
skipping to change at line 1394 ¶ | skipping to change at line 1396 ¶ | |||
BPSec protocol in protecting the confidentiality and integrity of the | BPSec protocol in protecting the confidentiality and integrity of the | |||
data against those threats. This section provides additional | data against those threats. This section provides additional | |||
discussion on security threats that BPSec will face and describes how | discussion on security threats that BPSec will face and describes how | |||
BPSec security mechanisms operate to mitigate these threats. | BPSec security mechanisms operate to mitigate these threats. | |||
The threat model described here is assumed to have a set of | The threat model described here is assumed to have a set of | |||
capabilities identical to those described by the Internet Threat | capabilities identical to those described by the Internet Threat | |||
Model in [RFC3552], but the BPSec threat model is scoped to | Model in [RFC3552], but the BPSec threat model is scoped to | |||
illustrate threats specific to BPSec operating within DTN | illustrate threats specific to BPSec operating within DTN | |||
environments; therefore, it focuses on on-path attackers (OPAs). In | environments; therefore, it focuses on on-path attackers (OPAs). In | |||
doing so, it is assumed that the DTN (or significant portions of the | doing so, it is assumed that the delay-tolerant network (or | |||
DTN) are completely under the control of an attacker. | significant portions of the delay-tolerant network) are completely | |||
under the control of an attacker. | ||||
8.1. Attacker Capabilities and Objectives | 8.1. Attacker Capabilities and Objectives | |||
BPSec was designed to protect against OPA threats that may have | BPSec was designed to protect against OPA threats that may have | |||
access to a bundle during transit from its source, Alice, to its | access to a bundle during transit from its source, Alice, to its | |||
destination, Bob. An OPA node, Olive, is a noncooperative node | destination, Bob. An OPA node, Olive, is a noncooperative node | |||
operating on the DTN between Alice and Bob that has the ability to | operating on the delay-tolerant network between Alice and Bob that | |||
receive bundles, examine bundles, modify bundles, forward bundles, | has the ability to receive bundles, examine bundles, modify bundles, | |||
and generate bundles at will in order to compromise the | forward bundles, and generate bundles at will in order to compromise | |||
confidentiality or integrity of data within the DTN. There are three | the confidentiality or integrity of data within the delay-tolerant | |||
classes of OPA nodes that are differentiated based on their access to | network. There are three classes of OPA nodes that are | |||
cryptographic material: | differentiated based on their access to cryptographic material: | |||
Unprivileged Node: Olive has not been provisioned within the secure | Unprivileged Node: Olive has not been provisioned within the secure | |||
environment and only has access to cryptographic material that has | environment and only has access to cryptographic material that has | |||
been publicly shared. | been publicly shared. | |||
Legitimate Node: Olive is within the secure environment; therefore, | Legitimate Node: Olive is within the secure environment; therefore, | |||
Olive has access to cryptographic material that has been | Olive has access to cryptographic material that has been | |||
provisioned to Olive (i.e., K_M) as well as material that has been | provisioned to Olive (i.e., K_M) as well as material that has been | |||
publicly shared. | publicly shared. | |||
Privileged Node: Olive is a privileged node within the secure | Privileged Node: Olive is a privileged node within the secure | |||
environment; therefore, Olive has access to cryptographic material | environment; therefore, Olive has access to cryptographic material | |||
that has been provisioned to Olive, Alice, and/or Bob (i.e., K_M, | that has been provisioned to Olive, Alice, and/or Bob (i.e., K_M, | |||
K_A, and/or K_B) as well as material that has been publicly | K_A, and/or K_B) as well as material that has been publicly | |||
shared. | shared. | |||
If Olive is operating as a privileged node, this is tantamount to | If Olive is operating as a privileged node, this is tantamount to | |||
compromise; BPSec does not provide mechanisms to detect or remove | compromise; BPSec does not provide mechanisms to detect or remove | |||
Olive from the DTN or BPSec secure environment. It is up to the | Olive from the delay-tolerant network or BPSec secure environment. | |||
BPSec implementer or the underlying cryptographic mechanisms to | It is up to the BPSec implementer or the underlying cryptographic | |||
provide appropriate capabilities if they are needed. It should also | mechanisms to provide appropriate capabilities if they are needed. | |||
be noted that if the implementation of BPSec uses a single set of | It should also be noted that if the implementation of BPSec uses a | |||
shared cryptographic material for all nodes, a legitimate node is | single set of shared cryptographic material for all nodes, a | |||
equivalent to a privileged node because K_M == K_A == K_B. For this | legitimate node is equivalent to a privileged node because K_M == K_A | |||
reason, sharing cryptographic material in this way is not | == K_B. For this reason, sharing cryptographic material in this way | |||
recommended. | is not recommended. | |||
A special case of the legitimate node is when Olive is either Alice | A special case of the legitimate node is when Olive is either Alice | |||
or Bob (i.e., K_M == K_A or K_M == K_B). In this case, Olive is able | or Bob (i.e., K_M == K_A or K_M == K_B). In this case, Olive is able | |||
to impersonate traffic as either Alice or Bob, respectively, which | to impersonate traffic as either Alice or Bob, respectively, which | |||
means that traffic to and from that node can be decrypted and | means that traffic to and from that node can be decrypted and | |||
encrypted, respectively. Additionally, messages may be signed as | encrypted, respectively. Additionally, messages may be signed as | |||
originating from one of the endpoints. | originating from one of the endpoints. | |||
8.2. Attacker Behaviors and BPSec Mitigations | 8.2. Attacker Behaviors and BPSec Mitigations | |||
skipping to change at line 1457 ¶ | skipping to change at line 1460 ¶ | |||
of that bundle and attempt to recover any protected data or | of that bundle and attempt to recover any protected data or | |||
cryptographic keying material from the blocks contained within. The | cryptographic keying material from the blocks contained within. The | |||
protection mechanism that BPSec provides against this action is the | protection mechanism that BPSec provides against this action is the | |||
BCB, which encrypts the contents of its security target, providing | BCB, which encrypts the contents of its security target, providing | |||
confidentiality of the data. Of course, it should be assumed that | confidentiality of the data. Of course, it should be assumed that | |||
Olive is able to attempt offline recovery of encrypted data, so the | Olive is able to attempt offline recovery of encrypted data, so the | |||
cryptographic mechanisms selected to protect the data should provide | cryptographic mechanisms selected to protect the data should provide | |||
a suitable level of protection. | a suitable level of protection. | |||
When evaluating the risk of eavesdropping attacks, it is important to | When evaluating the risk of eavesdropping attacks, it is important to | |||
consider the lifetime of bundles on a DTN. Depending on the network, | consider the lifetime of bundles on DTN. Depending on the network, | |||
bundles may persist for days or even years. Long-lived bundles imply | bundles may persist for days or even years. Long-lived bundles imply | |||
that the data exists in the network for a longer period of time and, | that the data exists in the network for a longer period of time and, | |||
thus, there may be more opportunities to capture those bundles. | thus, there may be more opportunities to capture those bundles. | |||
Additionally, the implication is that long-lived bundles store | Additionally, the implication is that long-lived bundles store | |||
information within that remains relevant and sensitive for long | information within that remains relevant and sensitive for long | |||
enough that, once captured, there is sufficient time to crack | enough that, once captured, there is sufficient time to crack | |||
encryption associated with the bundle. If a bundle does persist on | encryption associated with the bundle. If a bundle does persist on | |||
the network for years and the cipher suite used for a BCB provides | the network for years and the cipher suite used for a BCB provides | |||
inadequate protection, Olive may be able to recover the protected | inadequate protection, Olive may be able to recover the protected | |||
data either before that bundle reaches its intended destination or | data either before that bundle reaches its intended destination or | |||
skipping to change at line 1479 ¶ | skipping to change at line 1482 ¶ | |||
sensitive. | sensitive. | |||
NOTE: Olive is not limited by the bundle lifetime and may retain a | NOTE: Olive is not limited by the bundle lifetime and may retain a | |||
given bundle indefinitely. | given bundle indefinitely. | |||
NOTE: Irrespective of whether BPSec is used, traffic analysis will be | NOTE: Irrespective of whether BPSec is used, traffic analysis will be | |||
possible. | possible. | |||
8.2.2. Modification Attacks | 8.2.2. Modification Attacks | |||
As a node participating in the DTN between Alice and Bob, Olive will | As a node participating in the delay-tolerant network between Alice | |||
also be able to modify the received bundle, including non-BPSec data | and Bob, Olive will also be able to modify the received bundle, | |||
such as the primary block, payload blocks, or block processing | including non-BPSec data such as the primary block, payload blocks, | |||
control flags as defined in [RFC9171]. Olive will be able to | or block processing control flags as defined in [RFC9171]. Olive | |||
undertake activities including modification of data within the | will be able to undertake activities including modification of data | |||
blocks, replacement of blocks, addition of blocks, or removal of | within the blocks, replacement of blocks, addition of blocks, or | |||
blocks. Within BPSec, both the BIB and BCB provide integrity | removal of blocks. Within BPSec, both the BIB and BCB provide | |||
protection mechanisms to detect or prevent data manipulation attempts | integrity-protection mechanisms to detect or prevent data | |||
by Olive. | manipulation attempts by Olive. | |||
The BIB provides that protection to another block that is its | The BIB provides that protection to another block that is its | |||
security target. The cryptographic mechanisms used to generate the | security target. The cryptographic mechanisms used to generate the | |||
BIB should be strong against collision attacks, and Olive should not | BIB should be strong against collision attacks, and Olive should not | |||
have access to the cryptographic material used by the originating | have access to the cryptographic material used by the originating | |||
node to generate the BIB (e.g., K_A). If both of these conditions | node to generate the BIB (e.g., K_A). If both of these conditions | |||
are true, Olive will be unable to modify the security target or the | are true, Olive will be unable to modify the security target or the | |||
BIB and lead Bob to validate the security target as originating from | BIB, and thus she cannot lead Bob to validate the security target as | |||
Alice. | originating from Alice. | |||
Since BPSec security operations are implemented by placing blocks in | Since BPSec security operations are implemented by placing blocks in | |||
a bundle, there is no in-band mechanism for detecting or correcting | a bundle, there is no in-band mechanism for detecting or correcting | |||
certain cases where Olive removes blocks from a bundle. If Olive | certain cases where Olive removes blocks from a bundle. If Olive | |||
removes a BCB, but keeps the security target, the security target | removes a BCB, but keeps the security target, the security target | |||
remains encrypted and there is a possibility that there may no longer | remains encrypted and there is a possibility that there may no longer | |||
be sufficient information to decrypt the block at its destination. | be sufficient information to decrypt the block at its destination. | |||
If Olive removes both a BCB (or BIB) and its security target, there | If Olive removes both a BCB (or BIB) and its security target, there | |||
is no evidence left in the bundle of the security operation. | is no evidence left in the bundle of the security operation. | |||
Similarly, if Olive removes the BIB, but not the security target, | Similarly, if Olive removes the BIB, but not the security target, | |||
there is no evidence left in the bundle of the security operation. | there is no evidence left in the bundle of the security operation. | |||
In each of these cases, the implementation of BPSec must be combined | In each of these cases, the implementation of BPSec must be combined | |||
with policy configuration at endpoints in the network that describe | with policy configuration at endpoints in the network that describe | |||
the expected and required security operations that must be applied on | the expected and required security operations that must be applied on | |||
transmission and that are expected to be present on receipt. This or | transmission and that are expected to be present on receipt. This or | |||
other similar out-of-band information is required to correct for | other similar out-of-band information is required to correct for | |||
removal of security information in the bundle. | removal of security information in the bundle. | |||
A limitation of the BIB may exist within the implementation of BIB | A limitation of the BIB may exist within the implementation of BIB | |||
validation at the destination node. If Olive is a legitimate node | validation at the destination node. If Olive is a legitimate node | |||
within the DTN, the BIB generated by Alice with K_A can be replaced | within the delay-tolerant network, the BIB generated by Alice with | |||
with a new BIB generated with K_M and forwarded to Bob. If Bob is | K_A can be replaced with a new BIB generated with K_M and forwarded | |||
only validating that the BIB was generated by a legitimate user, Bob | to Bob. If Bob is only validating that the BIB was generated by a | |||
will acknowledge the message as originating from Olive instead of | legitimate user, Bob will acknowledge the message as originating from | |||
Alice. Validating a BIB indicates only that the BIB was generated by | Olive instead of Alice. Validating a BIB indicates only that the BIB | |||
a holder of the relevant key; it does not provide any guarantee that | was generated by a holder of the relevant key; it does not provide | |||
the bundle or block was created by the same entity. In order to | any guarantee that the bundle or block was created by the same | |||
provide verifiable integrity checks, the BCB should require an | entity. In order to provide verifiable integrity checks, the BCB | |||
encryption scheme that is Indistinguishable under adaptive Chosen | should require an encryption scheme that is Indistinguishable under | |||
Ciphertext Attack (IND-CCA2) secure. Such an encryption scheme will | adaptive Chosen Ciphertext Attack (IND-CCA2) secure. Such an | |||
guard against signature substitution attempts by Olive. In this | encryption scheme will guard against signature substitution attempts | |||
case, Alice creates a BIB with the protected data block as the | by Olive. In this case, Alice creates a BIB with the protected data | |||
security target and then creates a BCB with both the BIB and | block as the security target and then creates a BCB with both the BIB | |||
protected data block as its security targets. | and protected data block as its security targets. | |||
8.2.3. Topology Attacks | 8.2.3. Topology Attacks | |||
If Olive is in an OPA position within the DTN, she is able to | If Olive is in an OPA position within the delay-tolerant network, she | |||
influence how any bundles that come to her may pass through the | is able to influence how any bundles that come to her may pass | |||
network. Upon receiving and processing a bundle that must be routed | through the network. Upon receiving and processing a bundle that | |||
elsewhere in the network, Olive has three options as to how to | must be routed elsewhere in the network, Olive has three options as | |||
proceed: not forward the bundle, forward the bundle as intended, or | to how to proceed: not forward the bundle, forward the bundle as | |||
forward the bundle to one or more specific nodes within the network. | intended, or forward the bundle to one or more specific nodes within | |||
the network. | ||||
Attacks that involve rerouting the packets throughout the network are | Attacks that involve rerouting the bundles throughout the network are | |||
essentially a special case of the modification attacks described in | essentially a special case of the modification attacks described in | |||
this section, one where the attacker is modifying fields within the | this section, one where the attacker is modifying fields within the | |||
primary block of the bundle. Given that BPSec cannot encrypt the | primary block of the bundle. Given that BPSec cannot encrypt the | |||
contents of the primary block, alternate methods must be used to | contents of the primary block, alternate methods must be used to | |||
prevent this situation. These methods may include requiring BIBs for | prevent this situation. These methods may include requiring BIBs for | |||
primary blocks, using encapsulation, or otherwise strategically | primary blocks, using encapsulation, or otherwise strategically | |||
manipulating primary block data. The details of any such mitigation | manipulating primary block data. The details of any such mitigation | |||
technique are specific to the implementation of the deploying network | technique are specific to the implementation of the deploying network | |||
and are outside of the scope of this document. | and are outside of the scope of this document. | |||
Furthermore, routing rules and policies may be useful in enforcing | Furthermore, routing rules and policies may be useful in enforcing | |||
particular traffic flows to prevent topology attacks. While these | particular traffic flows to prevent topology attacks. While these | |||
rules and policies may utilize some features provided by BPSec, their | rules and policies may utilize some features provided by BPSec, their | |||
definition is beyond the scope of this specification. | definition is beyond the scope of this specification. | |||
8.2.4. Message Injection | 8.2.4. Message Injection | |||
Olive is also able to generate new bundles and transmit them into the | Olive is also able to generate new bundles and transmit them into the | |||
DTN at will. These bundles may be either copies or slight | delay-tolerant network at will. These bundles may be either 1) | |||
modifications of previously observed bundles (i.e., a replay attack) | copies or slight modifications of previously observed bundles (i.e., | |||
or entirely new bundles generated based on the Bundle Protocol, | a replay attack) or 2) entirely new bundles generated based on the | |||
BPSec, or other bundle-related protocols. With these attacks, | Bundle Protocol, BPSec, or other bundle-related protocols. With | |||
Olive's objectives may vary, but may be targeting either the Bundle | these attacks, Olive's objectives may vary, but may be targeting | |||
Protocol or application-layer protocols conveyed by the Bundle | either the Bundle Protocol or application-layer protocols conveyed by | |||
Protocol. The target could also be the storage and compute of the | the Bundle Protocol. The target could also be the storage and | |||
nodes running the bundle or application-layer protocols (e.g., a | computing capabilities of the nodes running the bundle or | |||
denial of service to flood on the storage of the store-and-forward | application-layer protocols (e.g., a denial of service to flood on | |||
mechanism or a compute that would process the packets and perhaps | the storage of the store-and-forward mechanism or a computation that | |||
prevent other activities). | would process the bundles and perhaps prevent other activities). | |||
BPSec relies on cipher suite capabilities to prevent replay or forged | BPSec relies on cipher suite capabilities to prevent replay or forged | |||
message attacks. A BCB used with appropriate cryptographic | message attacks. A BCB used with appropriate cryptographic | |||
mechanisms may provide replay protection under certain circumstances. | mechanisms may provide replay protection under certain circumstances. | |||
Alternatively, application data itself may be augmented to include | Alternatively, application data itself may be augmented to include | |||
mechanisms to assert data uniqueness and then be protected with a | 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 | 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. | receiving node would be able to validate the uniqueness of the data. | |||
For example, a BIB may be used to validate the integrity of a | For example, a BIB may be used to validate the integrity of a | |||
bundle's primary block, which includes a timestamp and lifetime for | bundle's primary block, which includes a timestamp and lifetime for | |||
the bundle. If a bundle is replayed outside of its lifetime, then | the bundle. If a bundle is replayed outside of its lifetime, then | |||
the replay attack will fail as the bundle will be discarded. | the replay attack will fail as the bundle will be discarded. | |||
Similarly, additional blocks, such as the Bundle Age, may be signed | Similarly, additional blocks, such as the Bundle Age, may be signed | |||
and validated to identify replay attacks. Finally, security context | and validated to identify replay attacks. Finally, security context | |||
parameters within BIB and BCB blocks may include anti-replay | parameters within BIBs and BCBs may include anti-replay mechanisms | |||
mechanisms such as session identifiers, nonces, and dynamic passwords | such as session identifiers, nonces, and dynamic passwords as | |||
as supported by network characteristics. | supported by network characteristics. | |||
9. Security Context Considerations | 9. Security Context Considerations | |||
9.1. Mandating Security Contexts | 9.1. Mandating Security Contexts | |||
Because of the diversity of networking scenarios and node | Because of the diversity of networking scenarios and node | |||
capabilities that may utilize BPSec, there is a risk that a single | capabilities that may utilize BPSec, there is a risk that a single | |||
security context mandated for every possible BPSec implementation is | security context mandated for every possible BPSec implementation is | |||
not feasible. For example, a security context appropriate for a | not feasible. For example, a security context appropriate for a | |||
resource-constrained node with limited connectivity may be | resource-constrained node with limited connectivity may be | |||
skipping to change at line 1610 ¶ | skipping to change at line 1614 ¶ | |||
This does not mean that the use of BPSec in a particular network is | This does not mean that the use of BPSec in a particular network is | |||
meant to happen without security contexts for interoperability and | meant to happen without security contexts for interoperability and | |||
default behavior. Network designers must identify the minimal set of | default behavior. Network designers must identify the minimal set of | |||
security contexts necessary for functions in their network. For | security contexts necessary for functions in their network. For | |||
example, a default set of security contexts could be created for use | example, a default set of security contexts could be created for use | |||
over the terrestrial Internet, and they could be required by any | over the terrestrial Internet, and they could be required by any | |||
BPSec implementation communicating over the terrestrial Internet. | BPSec implementation communicating over the terrestrial Internet. | |||
To ensure interoperability among various implementations, all BPSec | To ensure interoperability among various implementations, all BPSec | |||
implementations MUST support at least the current IETF Standards | implementations MUST support at least the current, mandatory security | |||
Track mandatory security context(s). As of this writing, that BP | context(s) defined in IETF Standards Track RFCs. As of this writing, | |||
mandatory security context is specified in [RFC9173], but the | that BP mandatory security context is specified in [RFC9173], but the | |||
mandatory security context(s) might change over time in accordance | mandatory security context(s) might change over time in accordance | |||
with usual IETF processes. Such changes are likely to occur in the | with usual IETF processes. Such changes are likely to occur in the | |||
future if/when flaws are discovered in the applicable cryptographic | future if/when flaws are discovered in the applicable cryptographic | |||
algorithms, for example. | algorithms, for example. | |||
Additionally, BPSec implementations need to support the security | Additionally, BPSec implementations need to support the security | |||
contexts that are specified and/or used by the BP networks in which | contexts that are required by the BP networks in which they are | |||
they are deployed. | deployed. | |||
If a node serves as a gateway between two or more networks, the BPSec | If a node serves as a gateway between two or more networks, the BPSec | |||
implementation at that node needs to support the union of security | implementation at that node needs to support the union of security | |||
contexts mandated in those networks. | contexts mandated in those networks. | |||
BPSec has been designed to allow for a diversity of security contexts | BPSec has been designed to allow for a diversity of security contexts | |||
and for new contexts to be defined over time. The use of different | and for new contexts to be defined over time. The use of different | |||
security contexts does not change the BPSec protocol itself, and the | security contexts does not change the BPSec protocol itself, and the | |||
definition of new security contexts MUST adhere to the requirements | definition of new security contexts MUST adhere to the requirements | |||
of such contexts as presented in this section and generally in this | of such contexts as presented in this section and generally in this | |||
skipping to change at line 1699 ¶ | skipping to change at line 1703 ¶ | |||
Developers or implementers should consider the diverse performance | Developers or implementers should consider the diverse performance | |||
and conditions of networks on which the Bundle Protocol (and, | and conditions of networks on which the Bundle Protocol (and, | |||
therefore, BPSec) will operate. Specifically, the delay and capacity | therefore, BPSec) will operate. Specifically, the delay and capacity | |||
of DTNs can vary substantially. Developers should consider these | of DTNs can vary substantially. Developers should consider these | |||
conditions to better describe the conditions in which those contexts | conditions to better describe the conditions in which those contexts | |||
will operate or exhibit vulnerability, and selection of these | will operate or exhibit vulnerability, and selection of these | |||
contexts for implementation should be made with consideration for | contexts for implementation should be made with consideration for | |||
this reality. There are key differences that may limit the | this reality. There are key differences that may limit the | |||
opportunity for a security context to leverage existing cipher suites | opportunity for a security context to leverage existing cipher suites | |||
and technologies that have been developed for use in traditional, | and technologies that have been developed for use in more reliable | |||
more reliable networks: | networks: | |||
Data Lifetime: Depending on the application environment, bundles may | Data Lifetime: Depending on the application environment, bundles may | |||
persist on the network for extended periods of time, perhaps even | persist on the network for extended periods of time, perhaps even | |||
years. Cryptographic algorithms should be selected to ensure | years. Cryptographic algorithms should be selected to ensure | |||
protection of data against attacks for a length of time reasonable | protection of data against attacks for a length of time reasonable | |||
for the application. | for the application. | |||
One-Way Traffic: Depending on the application environment, it is | One-Way Traffic: Depending on the application environment, it is | |||
possible that only a one-way connection may exist between two | possible that only a one-way connection may exist between two | |||
endpoints, or if a two-way connection does exist, the round-trip | endpoints, or if a two-way connection does exist, the round-trip | |||
skipping to change at line 1736 ¶ | skipping to change at line 1740 ¶ | |||
parameter Ids, the data types of those parameters, and their CBOR | parameter Ids, the data types of those parameters, and their CBOR | |||
encoding. | encoding. | |||
Security Results: Security contexts MUST define their security | Security Results: Security contexts MUST define their security | |||
result Ids, the data types of those results, and their CBOR | result Ids, the data types of those results, and their CBOR | |||
encoding. | encoding. | |||
New Canonicalizations: Security contexts may define new | New Canonicalizations: Security contexts may define new | |||
canonicalization algorithms as necessary. | canonicalization algorithms as necessary. | |||
Cipher-Text Size: Security contexts MUST state whether their | Ciphertext Size: Security contexts MUST state whether their | |||
associated cipher suites generate cipher text (to include any | associated cipher suites generate ciphertext (to include any | |||
authentication information) that is of a different size than the | authentication information) that is of a different size than the | |||
input plain text. | input plaintext. | |||
If a security context does not wish to alter the size of the plain | If a security context does not wish to alter the size of the | |||
text, it should place overflow bytes and authentication tags in | plaintext, it should place overflow bytes and authentication tags | |||
security result fields. | in security result fields. | |||
Block Header Information: Security contexts SHOULD include block | Block Header Information: Security contexts SHOULD include block | |||
header information that is considered to be immutable for the | header information that is considered to be immutable for the | |||
block. This information MAY include the block type code, block | block. This information MAY include the block type code, block | |||
number, CRC type, and CRC field (if present or if missing and | number, CRC type, and CRC field (if present or if missing and | |||
unlikely to be added later), and possibly certain block processing | unlikely to be added later), and possibly certain block processing | |||
control flags. Designers should input these fields as additional | control flags. Designers should input these fields as additional | |||
data for integrity protection when these fields are expected to | data for integrity protection when these fields are expected to | |||
remain unchanged over the path the block will take from the | remain unchanged over the path the block will take from the | |||
security source to the security acceptor. Security contexts | security source to the security acceptor. Security contexts | |||
considering block header information MUST describe expected | considering block header information MUST describe expected | |||
behavior when these fields fail their integrity verification. | behavior when these fields fail their integrity verification. | |||
Handling CRC Fields: Security contexts may include algorithms that | Handling CRC Fields: Security contexts may include algorithms that | |||
alter the contexts of their security target block, such as the | alter the contexts of their security target block, such as the | |||
case when encrypting the block-type-specific data of a target | case when encrypting the block-type-specific data of a target | |||
block as part of a BCB confidentiality service. Security context | block as part of a BCB confidentiality service. Security context | |||
specifications SHOULD address how preexisting CRC-Type and CRC- | specifications SHOULD address how preexisting CRC type and CRC | |||
Value fields be handled. For example, a BCB security context | value fields be handled. For example, a BCB security context | |||
could remove the plain text CRC value from its target upon | could remove the plaintext CRC value from its target upon | |||
encryption and replace or recalculate the value upon decryption. | encryption and replace or recalculate the value upon decryption. | |||
10. Defining Other Security Blocks | 10. Defining Other Security Blocks | |||
Other Security Blocks (OSBs) may be defined and used in addition to | Other Security Blocks (OSBs) may be defined and used in addition to | |||
the security blocks identified in this specification. Both the usage | the security blocks identified in this specification. BIB, BCB, and | |||
of BIB, BCB, and any future OSBs can coexist within a bundle and can | any future OSBs can coexist within a bundle and can be considered in | |||
be considered in conformance with BPSec if each of the following | conformance with BPSec if all of the following requirements are met | |||
requirements are met by any future identified security blocks. | by any future identified security blocks. | |||
* OSBs MUST NOT reuse any enumerations identified in this | * OSBs MUST NOT reuse any enumerations identified in this | |||
specification, to include the block type codes for BIB and BCB. | specification, to include the block type codes for BIB and BCB. | |||
* An OSB definition MUST state whether it can be the target of a BIB | * An OSB definition MUST state whether it can be the target of a BIB | |||
or a BCB. The definition MUST also state whether the OSB can | or a BCB. The definition MUST also state whether the OSB can | |||
target a BIB or a BCB. | target a BIB or a BCB. | |||
* An OSB definition MUST provide a deterministic processing order in | * An OSB definition MUST provide a deterministic processing order in | |||
the event that a bundle is received containing BIBs, BCBs, and | the event that a bundle is received containing BIBs, BCBs, and | |||
OSBs. This processing order MUST NOT alter the BIB and BCB | OSBs. This processing order MUST NOT alter the BIB and BCB | |||
processing orders identified in this specification. | processing orders identified in this specification. | |||
* An OSB definition MUST provide a canonicalization algorithm if the | * An OSB definition MUST provide a canonicalization algorithm if the | |||
default non-primary-block canonicalization algorithm cannot be | default algorithm for non-primary-block canonicalization cannot be | |||
used to generate a deterministic input for a cipher suite. This | used to generate a deterministic input for a cipher suite. This | |||
requirement can be waived if the OSB is defined so as to never be | requirement can be waived if the OSB is defined so as to never be | |||
the security target of a BIB or a BCB. | the security target of a BIB or a BCB. | |||
* An OSB definition MUST NOT require any behavior of a BPSEC-BPA | * An OSB definition MUST NOT require any behavior of a BPSec BPA | |||
that is in conflict with the behavior identified in this | that is in conflict with the behavior identified in this | |||
specification. In particular, the security processing | specification. In particular, the security processing | |||
requirements imposed by this specification must be consistent | requirements imposed by this specification must be consistent | |||
across all BPSEC-BPAs in a network. | across all BPSec BPAs in a network. | |||
* The behavior of an OSB when dealing with fragmentation must be | * The behavior of an OSB when dealing with fragmentation must be | |||
specified and MUST NOT lead to ambiguous processing states. In | specified and MUST NOT lead to ambiguous processing states. In | |||
particular, an OSB definition should address how to receive and | particular, an OSB definition should address how to receive and | |||
process an OSB in a bundle fragment that may or may not also | process an OSB in a bundle fragment that may or may not also | |||
contain its security target. An OSB definition should also | contain its security target. An OSB definition should also | |||
address whether an OSB may be added to a bundle marked as a | address whether an OSB may be added to a bundle marked as a | |||
fragment. | fragment. | |||
Additionally, policy considerations for the management, monitoring, | Additionally, policy considerations for the management, monitoring, | |||
skipping to change at line 1825 ¶ | skipping to change at line 1829 ¶ | |||
11. IANA Considerations | 11. IANA Considerations | |||
This specification includes fields that require registries managed by | This specification includes fields that require registries managed by | |||
IANA. | IANA. | |||
11.1. Bundle Block Types | 11.1. Bundle Block Types | |||
This specification allocates two block types from the existing | This specification allocates two block types from the existing | |||
"Bundle Block Types" registry defined in [RFC6255]. | "Bundle Block Types" registry defined in [RFC6255]. | |||
+=======+=============================+===============+ | +=======+=======================+===============+ | |||
| Value | Description | Reference | | | Value | Description | Reference | | |||
+=======+=============================+===============+ | +=======+=======================+===============+ | |||
| 11 | Block Integrity Block | This document | | | 11 | Block Integrity | This document | | |||
+-------+-----------------------------+---------------+ | +-------+-----------------------+---------------+ | |||
| 12 | Block Confidentiality Block | This document | | | 12 | Block Confidentiality | This document | | |||
+-------+-----------------------------+---------------+ | +-------+-----------------------+---------------+ | |||
Table 2: Additional Entries for the "Bundle Block | Table 2: Additional Entries for the "Bundle | |||
Type" Registry | Block Type" Registry | |||
The "Bundle Block Types" registry notes whether a block type is meant | The "Bundle Block Types" registry notes whether a block type is meant | |||
for use in BP version 6, BP version 7, or both. The two block types | for use in BP version 6, BP version 7 (BPv7), or both. The two block | |||
defined in this specification are meant for use with BP version 7. | types defined in this specification are meant for use with BPv7. | |||
11.2. Bundle Status Report Reason Codes | 11.2. Bundle Status Report Reason Codes | |||
This specification allocates five reason codes from the existing | This specification allocates five reason codes from the existing | |||
"Bundle Status Report Reason Codes" registry defined in [RFC6255]. | "Bundle Status Report Reason Codes" registry defined in [RFC6255]. | |||
+============+=======+============================+================+ | +============+=======+============================+================+ | |||
| BP Version | Value | Description | Reference | | | BP Version | Value | Description | Reference | | |||
+============+=======+============================+================+ | +============+=======+============================+================+ | |||
| 7 | 12 | Missing Security Operation | This document, | | | 7 | 12 | Missing security operation | This document, | | |||
| | | | Section 7.1 | | | | | | Section 7.1 | | |||
+------------+-------+----------------------------+----------------+ | +------------+-------+----------------------------+----------------+ | |||
| 7 | 13 | Unknown Security Operation | This document, | | | 7 | 13 | Unknown security operation | This document, | | |||
| | | | Section 7.1 | | | | | | Section 7.1 | | |||
+------------+-------+----------------------------+----------------+ | +------------+-------+----------------------------+----------------+ | |||
| 7 | 14 | Unexpected Security | This document, | | | 7 | 14 | Unexpected security | This document, | | |||
| | | Operation | Section 7.1 | | | | | operation | Section 7.1 | | |||
+------------+-------+----------------------------+----------------+ | +------------+-------+----------------------------+----------------+ | |||
| 7 | 15 | Failed Security Operation | This document, | | | 7 | 15 | Failed security operation | This document, | | |||
| | | | Section 7.1 | | | | | | Section 7.1 | | |||
+------------+-------+----------------------------+----------------+ | +------------+-------+----------------------------+----------------+ | |||
| 7 | 16 | Conflicting Security | This document, | | | 7 | 16 | Conflicting security | This document, | | |||
| | | Operation | Section 7.1 | | | | | operation | Section 7.1 | | |||
+------------+-------+----------------------------+----------------+ | +------------+-------+----------------------------+----------------+ | |||
Table 3: Additional Entries for the "Bundle Status Report Reason | Table 3: Additional Entries for the "Bundle Status Report Reason | |||
Codes" Registry | Codes" Registry | |||
11.3. Security Context Identifiers | 11.3. Security Context Identifiers | |||
BPSec has a Security Context Identifier field for which IANA has | BPSec has a Security Context Identifier field for which IANA has | |||
created a new registry named "BPSec Security Context Identifiers". | created a new registry named "BPSec Security Context Identifiers". | |||
Initial values for this registry are given below. | Initial values for this registry are given below. | |||
skipping to change at line 1930 ¶ | skipping to change at line 1934 ¶ | |||
[RFC9171] Burleigh, S., Fall, K., and E. Birrane, III, "Bundle | [RFC9171] Burleigh, S., Fall, K., and E. Birrane, III, "Bundle | |||
Protocol Version 7", RFC 9171, DOI 10.17487/RFC9171, | Protocol Version 7", RFC 9171, DOI 10.17487/RFC9171, | |||
November 2021, <https://www.rfc-editor.org/info/rfc9171>. | November 2021, <https://www.rfc-editor.org/info/rfc9171>. | |||
[RFC9173] Birrane, III, E., "BPSec Default Security Contexts", | [RFC9173] Birrane, III, E., "BPSec Default Security Contexts", | |||
RFC 9173, DOI 10.17487/RFC9173, November 2021, | RFC 9173, DOI 10.17487/RFC9173, November 2021, | |||
<https://www.rfc-editor.org/info/rfc9173>. | <https://www.rfc-editor.org/info/rfc9173>. | |||
12.2. Informative References | 12.2. Informative References | |||
[DTN-SBSP] Birrane, E., Pierce-Mayer, J., and D. Iannicca, | ||||
"Streamlined Bundle Security Protocol Specification", Work | ||||
in Progress, Internet-Draft, draft-birrane-dtn-sbsp-01, 16 | ||||
October 2015, <https://datatracker.ietf.org/doc/html/ | ||||
draft-birrane-dtn-sbsp-01>. | ||||
[RFC4838] Cerf, V., Burleigh, S., Hooke, A., Torgerson, L., Durst, | [RFC4838] Cerf, V., Burleigh, S., Hooke, A., Torgerson, L., Durst, | |||
R., Scott, K., Fall, K., and H. Weiss, "Delay-Tolerant | R., Scott, K., Fall, K., and H. Weiss, "Delay-Tolerant | |||
Networking Architecture", RFC 4838, DOI 10.17487/RFC4838, | Networking Architecture", RFC 4838, DOI 10.17487/RFC4838, | |||
April 2007, <https://www.rfc-editor.org/info/rfc4838>. | April 2007, <https://www.rfc-editor.org/info/rfc4838>. | |||
[RFC6257] Symington, S., Farrell, S., Weiss, H., and P. Lovell, | [RFC6257] Symington, S., Farrell, S., Weiss, H., and P. Lovell, | |||
"Bundle Security Protocol Specification", RFC 6257, | "Bundle Security Protocol Specification", RFC 6257, | |||
DOI 10.17487/RFC6257, May 2011, | DOI 10.17487/RFC6257, May 2011, | |||
<https://www.rfc-editor.org/info/rfc6257>. | <https://www.rfc-editor.org/info/rfc6257>. | |||
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
<https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
Acknowledgements | Acknowledgments | |||
The following participants contributed technical material, use cases, | 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: Scott Burleigh of the IPNGROUP, Angela Hennessy of the | |||
Angela Hennessy of the Laboratory for Telecommunications Sciences, | Laboratory for Telecommunications Sciences, Amy Alford and Cherita | |||
and Amy Alford, Angela Dalton, and Cherita Corbett of the Johns | Corbett of the Johns Hopkins University Applied Physics Laboratory | |||
Hopkins University Applied Physics Laboratory. | (JHU/APL), and Angela Dalton of AMD Research. | |||
Additionally, Benjamin Kaduk of Akamai Technologies provided a | ||||
detailed technical review that resulted in a stronger and more | ||||
precise specification. | ||||
Authors' Addresses | Authors' Addresses | |||
Edward J. Birrane, III | Edward J. Birrane, III | |||
The Johns Hopkins University Applied Physics Laboratory | The Johns Hopkins University Applied Physics Laboratory | |||
11100 Johns Hopkins Rd. | 11100 Johns Hopkins Rd. | |||
Laurel, MD 20723 | Laurel, MD 20723 | |||
United States of America | United States of America | |||
Phone: +1 443 778 7423 | Phone: +1 443 778 7423 | |||
End of changes. 118 change blocks. | ||||
330 lines changed or deleted | 332 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/ |