Skip to content

status: "accepted" date: 2025-07-22 deciders: @ahouseholer @sei-vsarvepalli consulted: @tschmidtb51


Use of Namespaces in SSVC objects

Context and Problem Statement

We need to include decision points and other objects that are not directly defined by the SSVC project team. For example, CVSS vector elements are a rich source of structured data that can be used to inform SSVC decisions and modeled as SSVC decision point objects. However, the FIRST CVSS SIG owns the definition of CVSS vector elements. So we need a way to describe these objects in SSVC format without making them part of the SSVC specification.

Decision Drivers

  • Need to include decision points based on data, objects, standards, and other definitions that are not part of the SSVC specification.
  • Need to clearly distinguish between objects managed by the SSVC project and objects provided for convenience by the SSVC project, but whose semantics are defined by other projects or standards.

Considered Options

  • One big pile of objects (effectively no namespaces)
  • Use namespaces to distinguish between SSVC project objects and other objects

Decision Outcome

Chosen option: "Use namespaces", because

  • Clearly distinguishes between SSVC project objects and objects derived from other sources
  • Allows for extension of SSVC objects with additional data from other sources
  • Allows for extensions for langauages, translation, localization, etc.

Specifically, we intend to use:

Registered namespaces for objects that we create and maintain (even if they are based on other sources).

Example

We use the ssvc namespace for all SSVC objects that are part of the main project. We use the cvss namespace to contain CVSS vector elements.

Unregistered namespaces for objects that we do not create or maintain, but that others may want for their own use. Unregistered namespaces must start with an x_ prefix followed by a reverse domain name, such as x_org.example. Unregistered namespaces are intended for experimental or private use.

Example

A government agency might create a set of decision points for internal use using the x_example.agency namespace. This allows them to use SSVC objects of their own design alongside existig SSVC objects without needing to register their namespace with the SSVC project.

Namespace extensions for objects that are derived from other objects in an registered or unregistered namespace. Extensions are not intended to be used to introduce new objects, but rather to refine existing objects with additional data or semantics. Namespace extensions can be used for refining the meaning of decision point values for a specific constituency, or adding additional nuance to interpretation of a decision point in a specific context.

Example

An ISAO (Information Sharing and Analyzing Organization) might want to refine the meaning of decision point values for their constituency, and could use ssvc//example.isao as the namespace for their collection of extensions.

Consequences

Positive Consequences

  • SSVC users can customize SSVC objects with additional refinements using extensions
  • SSVC users can create their own SSVC objects in an unregistered namespace for their own use, and share them with others
  • Facilitates language translation and localization of SSVC objects to specific constituencies

Negative Consequences

  • Registered namespaces must be managed and maintained
  • Potential for confusion if unregistered namespaces are used without care or violating the naming conventions

Confirmation

  • Regular expressions are used in the SSVC specification in both python objects and JSON schema to validate the namespace format.
  • Object validators can be used to ensure that namespaces are correctly formatted and that registered namespaces are used for objects that are part of the SSVC specification.

Pros and Cons of the Options

One big pile of objects

We started out with all objects having no namespaces, which meant that all objects were effectively part of the SSVC specification. This was problematic because it made it difficult to distinguish between objects that were part of the SSVC specification under our control and objects that were derived from other sources.

  • Good, because it was simple and easy to understand
  • Bad, because it made it difficult to distinguish between SSVC project objects and objects based on specifications we neither created nor maintained

More Information