Copyright © 2023-2025 The Johns Hopkins University Applied Physics Laboratory LLC
License
This document is part of the Bundle Protocol Security Library (BSL).
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
This work was performed for the Jet Propulsion Laboratory, California Institute of Technology, sponsored by the United States Government under the prime contract 80NM0018D0004 between the Caltech and NASA under subcontract 1700763.
Revision History | |
---|---|
Revision Initial | TBD |
Initial issue of document for BSL v1.0.0 |
This User Guide provides an overview of the application programming interface (API) and high-level workflows of the Bundle Protocol Security Library (BSL), which is part of the NASA Advanced Multi-Mission Operations System (AMMOS) suite of tools.
Property | Value |
---|---|
Configuration ID (CI) | 681.4 |
Element | Mission Control System (MCS) |
Program Set | Bundle Protocol Security Library (BSL) |
Version | 1.0 |
This document describes the API and workflows of the BSL. For technical details about the BSL architecture, installation, upgrade, monitoring, and maintenance see the BSL Product Guide.
The overlay network protocol used to transport BPSec blocks and target blocks between nodes.
The mandatory-to-implement security mechanism to protect blocks of a BP bundle. This is the principal scope of behavior implemented in the BSL.
The instantiation of a BP node with a unique administrative Endpoint ID.
The source or destination of a BP bundle, identified by a BP Endpoint ID (EID).
The identifier of a BP Endpoint; names the source and destination for a BP bundle.
The data format used to encode BP Bundles.
CLAs send and receive BP bundles on behalf of the BPA.
A single node on the network and a single instance of an operating system. One host can have many interfaces and many IP addresses, but only one canonical host name.
TBD
Title | Document Number |
---|---|
Software Development | 57653 rev 10 |
Title | Document Number |
---|---|
MGSS Implementation and Maintenance Task Requirements | DOC-001455 rev G |
BSL Product Guide | DOC-TBD |
Title | Reference |
---|---|
BSL Source | |
BSL Documentation Source | |
Bundle Protocol Version 7 | |
Bundle Protocol Security (BPSec) | |
Default Security Contexts for Bundle Protocol Security (BPSec) |
The following section provides an overview of the BSL API and references to specific sections of the online API documentation.
The BSL as a whole is separated into two primary layers of implementation: an API-centric abstract Frontend library and a host-binding concrete Backend library.
The Frontend library provides the service API for the BSL to be called by its associated BPA as needed and for stable public APIs used by Policy Provider implementations and Security Context implementations. The Backend library implements forward-declared structs and functions from the Frontend using specific concrete data containers, algorithms, etc.
Most interactions with the BSL/frontend API occur within the context of a single bundle. There are four points along bundle traversal where BSL interaction from the BPA is necessary:
Policy Providers should be registered with the library context. Policy Providers must implement the function headers of the frontend PolicyProvider.h
header file. The BSL includes a simple rule-based example PP that may be utilized.
Policy Providers must inspect each bundle to produce an Action Set, containing Security Operations. Policy Providers also must finalize over a bundle after each Security Operation has been executed by the security context.
Security Contexts should be registered with the library context. Security Contexts must implement the function headers of the frontend SecurityContext.h
header file. The BSL includes two Default Security Context implementations (specified in RFC9173), BIB-HMAC-SHA2
(Bundle Integrity) and BCB-AES-GCM
(Bundle Confidentiality) that may be utilized. The BSL backend cryptographic interface utilizes OpenSSL to perform HMAC-signing, encryption, and decryption operations.
Security Contexts operate in the context of a single Security Operation over a bundle. Security Contexts must validate Security Operations for consistency, and process Security Operations on bundles to produce security outcomes.
An executable used to provide a test fixture and example BPA integration. However, the Mock BPA does not provide any of the normal processing required of a real BPA by [RFC9171], it is limited to decoding and encoding BPv7 protocol data unit (PDU) byte strings, processing specific BPv7 primary block fields, providing BSL-required integration callbacks, and calling into the BSL for each bundle being processed at each interaction point. Users may reference the Mock BPA for an example of library and bundle workflow.
A simple BPA that utilizes the example policy provider, default security contexts, and dynamic backend could operate with the following workflow:
Steps 1-5 contain BSL initialization instructions to be performed once (per-thread).
BSL_HostDescriptors_t
struct should be set with host-implemented functions and initialized with with BSL_HostDescriptors_Set()
in order for successful BSL operation. See the Mock BPA for a simple example of implementing host descriptors.BSL_LibCtx_t
pointer. Each instance should be initialized using BSL_LibCtx_Init()
.BSL_HostEID_Init()
.BSL_CryptoInit()
. Then, register the BIB-HMAC-SHA2
and BCB-AES-GCM
Default Security Contexts with the Library Context.Steps 6-11 should be performed for each bundle being processed.
BSL_BundleCtx_t
.BSL_LibCtx_t
instance should be de-initialized with BSL_LibCtx_Deinit()
.There are two levels of support for the BSL: troubleshooting by a system administrator, which is detailed in Section 3.1, and upstream support via the BSL public GitHub project, accessible as described in Section 3.2. Attempts to troubleshoot should be made before submitting issue tickets to the upstream project.
TBD
The BSL is hosted on a GitHub repository [bsl-source] with submodule references to several other repositories.
There is a CONTRIBUTING.md
document in the BSL repository which describes detailed procedures for submitting tickets to identify defects and suggest enhancements.
Separate from the source for the BSL proper, the BSL Product Guide and User Guide are hosted on a GitHub repository [bsl-docs], with its own CONTRIBUTING.md
document for submitting tickets about either the Product Guide or User Guide.
While the GitHub repositories are the primary means by which users should submit detailed tickets, other inquiries can be made directly via email to the the support address dtnma-support@jhuapl.edu.