<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-liu-cadi-02" category="std" consensus="true" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.0 -->
  <front>
    <title abbrev="CADI">Cryptographic Asset Discovery and Inventory</title>
    <seriesInfo name="Internet-Draft" value="draft-liu-cadi-02"/>
    <author initials="C. P." surname="Liu" fullname="Chunchi Peter Liu">
      <organization>Huawei</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>liuchunchi@huawei.com</email>
      </address>
    </author>
    <author initials="Y." surname="Fu" fullname="Yufan Fu">
      <organization>Huawei</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>fuyufan2@huawei.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <keyword>CADI</keyword>
    <keyword>PQC</keyword>
    <keyword>CBOM</keyword>
    <keyword>YANG</keyword>
    <abstract>
      <?line 106?>

<t>This document compiles existing Cryptographic Asset Discovery and Inventory (CADI) methods and analyzes potential gaps. It also defines a YANG data model that augments the base network inventory model with the cryptographic assets of each network element. The data model is aligned with the Cryptography Bill of Materials (CBOM) defined in CycloneDX.</t>
    </abstract>
  </front>
  <middle>
    <?line 110?>

<section anchor="intro">
      <name>Introduction</name>
      <t>Cryptographic Asset Discovery and Inventory (CADI) refers to a set of tools and guidelines that assist in identifying, collecting, normalizing, correlating, and continuously maintaining all cryptography-related assets, including configurations, dependencies, and usage contexts within a given organization, system, or product scope. It requires both technical tools and management approaches.</t>
      <t>Many Post-Quantum transition roadmaps have highlighted the importance of identifying legacy cryptographic assets inside of an organization as a crucial preparatory part. For example:</t>
      <ul spacing="normal">
        <li>
          <t>The G7 statement on "Advancing a Coordinated Roadmap for the Transition to Post-Quantum Cryptography in the Financial Sector" <xref target="G7"/> mentions there should exist six key PQ-migration activities:
          </t>
          <ul spacing="normal">
            <li>
              <t>Awareness and Preparation, <strong>Discovery and Inventory</strong>, Risk Assessment and Planning, Migration Execution, Migration Testing, Validation and Monitoring. The exact six stages are also published in NCCoE analysis on "Six Key Phases of the PQC Migration Journey" <xref target="NCCOEFAQ"/>.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>The United States Memorandum for the Heads of Executive Departments and Agencies on "Migrating to Post-Quantum Cryptography" <xref target="OMBM2302"/> requires:
          </t>
          <ul spacing="normal">
            <li>
              <t>All federal agencies to "<strong>Submit cryptographic system inventory By May 4, 2023 and annually thereafter</strong>". This important date is also mentioned in CISA directive "Strategy for Migrating to Automated Post-Quantum Cryptography Discovery and Inventory Tools"<xref target="CISAACDI"/>.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>Although the exact PQ-migration roadmap in each different nations varies, the fact that cryptographic asset discovery and inventory is a key prerequisite for Chief Information Security Officers to asses a migration budget and draft a migration plan does not change.</t>
      <t>This document analyzes existing CADI methods and potential gaps. It also defines a YANG data model that extends the network inventory with cryptographic assets.</t>
    </section>
    <section anchor="term">
      <name>Conventions and Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>The following terms are defined in <xref target="RFC7950"/> and are not redefined here: augment, data model, and data node. The terms "network element" and "component" are used as defined in <xref target="I-D.ietf-ivy-network-inventory-yang"/>. The meanings of the symbols in the YANG tree diagrams are defined in <xref target="RFC8340"/>.</t>
      <t>This document also uses the following terms:</t>
      <ul spacing="normal">
        <li>
          <t>CADI (Cryptographic Asset Discovery and Inventory) -- A set of tools and guidelines designed to automate the identification, collection, normalization, correlation, and lifecycle management of an organization's cryptographic assets.</t>
        </li>
        <li>
          <t>CBOM (Cryptography Bill of Materials) -- A machine-readable inventory of cryptographic assets, their properties, and their dependencies, defined as part of CycloneDX <xref target="CycloneDX"/>. In a CBOM, a cryptographic asset is a component of type "cryptographic-asset" described by "cryptoProperties".</t>
        </li>
        <li>
          <t>Cryptographic Asset -- A digital or physical element within a device or service-such as an algorithm, module, configuration, credential, secret, or communication protocol-that protects the confidentiality and integrity of secure data transmission or storage.</t>
        </li>
        <li>
          <t>Cryptographic System -- An active software or hardware implementation of one or more cryptographic algorithms that provide one or more of the following services: (1) creation and exchange of encryption keys; (2) encrypted connections; or (3) creation and validation of digital signatures. (according to <xref target="OMBM2302"/>)</t>
        </li>
        <li>
          <t>Cryptographically Relevant Quantum Computers (CRQC) -- A fault-tolerant quantum system capable of solving the underlying hardness assumption problems of widely used public-key cryptography in polynomial time, such as RSA and ECC.</t>
        </li>
      </ul>
    </section>
    <section anchor="ps">
      <name>Problem Statement and Challenges</name>
      <t>Apart from the milestones and requirements discussed above, there are also a few challenges to identify cryptographic assets:</t>
      <ul spacing="normal">
        <li>
          <t>Legacy ICT systems were not engineered to treat cryptographic primitives as distinct, trackable assets. Instead, cryptographic implementations are deeply integrated, highly distributed, and hidden across heterogeneous layers of the technology stack.</t>
        </li>
        <li>
          <t>Taking inventory manually would take enormous amount of effort, yet there may still be statistical omissions that leave security exposures.</t>
        </li>
        <li>
          <t>Methods like Cryptographic Bill of Materials (CBOM) only take effect on new devices to self-announce its cryptographic assets, but it cannot help identify legacy devices and systems.</t>
        </li>
        <li>
          <t>Legacy devices and systems often behave like blackboxes, many does not allow installing additional programs or tools on them.</t>
        </li>
      </ul>
      <t>As a result, the ideal CADI tool should meet the following requirements:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Automated</strong> scanning and inventory taking</t>
        </li>
        <li>
          <t><strong>Agnostic</strong> to target object's system designs and architectures</t>
        </li>
        <li>
          <t><strong>Integrate</strong> the result to existing network management and operations systems for unified presentation</t>
        </li>
      </ul>
      <t>The requirements for automation, architectural agnosticism, and network management integration suggest a protocol-driven approach, potentially placing this within the scope of the IETF. However, this remains open for discussion.</t>
    </section>
    <section anchor="discovery">
      <name>Discovery and Identification</name>
      <t>There are many ways of doing discovering and identification. We catagorize them into two: active identification and passive identification.</t>
      <ul spacing="normal">
        <li>
          <t><strong>Active Identification</strong>: The case where devices and services modifies its development and/or management process, actively self-announcing their cryptographic assets. Methods falls into this category includes:
          </t>
          <ul spacing="normal">
            <li>
              <t>CBOM Declaration</t>
            </li>
            <li>
              <t>Static Code Scanning</t>
            </li>
            <li>
              <t>Binary / Image Scanning</t>
            </li>
            <li>
              <t>CI/CD Integration</t>
            </li>
          </ul>
        </li>
        <li>
          <t><strong>Passive Identification</strong>: The case where devices and services will stay as-is and cannot self-announce their cryptographic assets. These devices will require additional external tools to assist the identification. Methods falls into this category includes:
          </t>
          <ul spacing="normal">
            <li>
              <t>Simulated Handshakes</t>
            </li>
            <li>
              <t>Configuration Extraction</t>
            </li>
            <li>
              <t>Traffic Pattern Analysis</t>
            </li>
            <li>
              <t>Process Identification</t>
            </li>
          </ul>
        </li>
      </ul>
      <section anchor="active-identification">
        <name>Active Identification</name>
        <section anchor="cryptographic-bill-of-materials-cbom-and-auxiliary-methods">
          <name>Cryptographic Bill of Materials (CBOM) and Auxiliary Methods</name>
          <t>CBOM-based identification is to empower cryptographic asset owners or vendors to explicitly declare cryptographic usage within their products, components, or services. Usually CBOM declaration is achieved through static code scanning and/or CI/CD integration, so we keep them in the same section.</t>
          <t>Scanning Methods:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Static Code Scanning</strong>:
              </t>
              <ul spacing="normal">
                <li>
                  <t>SCA (Software Composition Analysis): Scan manifest files (like <tt>package.json</tt>, <tt>requirements.txt</tt>, or <tt>pom.xml</tt>) from the codebase to create CBOMS, usually for analyzing third-party libraries dependency.</t>
                </li>
                <li>
                  <t>SAST (Static Application Security Testing): Builds a Abstract Syntax Tree (AST) with parsed syntax and data flow of the target source code. It then uses AST to track call chain to end crypto library, track variables (data flow) from source to destination, do reference matching, etc.
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>SCA and SAST is used by IBM CBOMKit-Hyperion.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <t><strong>Binary / Image Scanning</strong>:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Scan for algorithmic constants, signatures; Extract from OS trust stores and runtime configurations... The process details are omitted in this document due to complexity.
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>Binary / Image Scanning is used by IBM CBOMKit-Theia and CycloneDX Cdxgen.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
          <t>Tools and Modelling:</t>
          <ul spacing="normal">
            <li>
              <t><strong>IBM CBOMkit</strong>, Static code level scanning (Hyperion) and Artifact level scanning (Theia) <xref target="IBMCBOM"/>: uses <tt>implements</tt> and <tt>uses</tt> relationship to create dependency diagram.
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>implements</tt>: Describes the list of protocols or algorithms this module implements.</t>
                </li>
                <li>
                  <t><tt>uses</tt>: Describes what modules are used by this service.</t>
                </li>
                <li>
                  <t>For example, Application Nginx <tt>uses</tt> Library <tt>libssl.so</tt> that <tt>uses</tt> Protocol TLS v1.3/v1.2 that <tt>uses</tt> <tt>libcrypto.so</tt> that <tt>implements</tt> Algorithm MD5, SHA256, AES-128-GCM.</t>
                </li>
              </ul>
            </li>
            <li>
              <t><strong>CycloneDX Cdxgen</strong>, Artifact level scanning <xref target="CDXGEN"/>: uses <tt>dependsOn</tt> and <tt>provides</tt> relationship to create dependency diagram.
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>dependsOn</tt>: Describes other modules or services this module depends on.</t>
                </li>
                <li>
                  <t><tt>provides</tt>: Describes all capabilities this module provides.</t>
                </li>
                <li>
                  <t>For example, Application Nginx <tt>dependsOn</tt> Library <tt>libssl.so</tt> , which <tt>provides</tt> TLS 1.2.</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>After scanning, the result will be recorded as a CBOM object.</t>
          <t>CBOM data specification: A standardized cryptographic asset object includes cryptographic algorithms, digital certificates, protocols, private keys, public keys, cryptographic keys, ciphertext information, digital signatures, digests (the output values of hash functions), initialization vectors (input parameters for encryption algorithms), seeds, salts, shared secrets, authentication tags, passwords, credentials, and tokens. CycloneDX 1.7 <xref target="CycloneDX"/> groups them into four asset types: algorithm, certificate, protocol, and related cryptographic material. <xref target="fig-cbom"/> shows an example.</t>
          <figure anchor="fig-cbom">
            <name>Example CBOM (CycloneDX 1.7)</name>
            <artwork><![CDATA[
"components": [
 {
  "name": "google.com",
  "type": "cryptographic-asset",
  "bom-ref": "crypto/certificate/google.com@sha256:1e15e0fbd3ce9...",
  "cryptoProperties": {
    "assetType": "certificate",
    "certificateProperties": {
      "subjectName": "CN = www.google.com",
      "issuerName": "CN = GTS CA 1C3, O = Google Trust Services",
      "notValidBefore": "2016-11-21T08:00:00Z",
      "notValidAfter": "2017-11-22T07:59:59Z",
      "certificateFormat": "X.509",
      "certificateFileExtension": "crt",
      "relatedCryptographicAssets": [
        { "type": "algorithm", "ref": "crypto/algorithm/sha512-rsa" },
        { "type": "publicKey", "ref": "crypto/key/rsa-2048" }
      ]
    }
  }
 }
]
]]></artwork>
          </figure>
          <t>Gaps: Obviously, this does not help with identifying the mass legacy devices, components or services.</t>
        </section>
      </section>
      <section anchor="passive-identification">
        <name>Passive Identification</name>
        <section anchor="simulated-handshakes">
          <name>Simulated Handshakes</name>
          <t>Simulated handshake is a network-probing technique where a discovery tool acts as a client and intentionally initiates cryptographic protocol negotiations (e.g., TLS, SSH, IPsec) with enterprise network endpoints without completing the full data session. During the negotiation process, the discovery tool determines the specific cryptographic protocol versions, negotiation mechanisms, and ciphersuites supported by the endpoint. This is also known as <em>Active Probing</em>.</t>
          <t>Steps of simulated handshake include:</t>
          <ol spacing="normal" type="1"><li>
              <t><strong>Port Scan:</strong> The tool scans for typical ports for specific secure communication protocols (443 for HTTPS, 22 for SSH, etc)</t>
            </li>
            <li>
              <t><strong>Probing:</strong> The tool generates a RFC-compliant connection initialization packet, including all currently standardized ciphersuites, and examine the response.</t>
            </li>
            <li>
              <t><strong>Response Extraction:</strong> The target object respond with supported ciphersuites, following its own internal priority rules.</t>
            </li>
            <li>
              <t><strong>Parsing:</strong> The tool intercepts this raw response and decodes it as cryptographic assets.</t>
            </li>
          </ol>
          <t>This works for most secure protocols that includes negotiation:</t>
          <ul spacing="normal">
            <li>
              <t>IPSEC</t>
            </li>
            <li>
              <t>TLS</t>
            </li>
            <li>
              <t>SSH</t>
            </li>
          </ul>
          <t>Pros and Cons/Gaps:</t>
          <ul spacing="normal">
            <li>
              <t>Strengths:
              </t>
              <ul spacing="normal">
                <li>
                  <t>This kind of method does not require complex engineering refactoring. Since it is agnostic to the design of the target, it works best for the case where the manager operates vast heterogeneous devices from different vendors, versions and locations, hence telecommunications case.</t>
                </li>
                <li>
                  <t>This probing is one-time, thus it will not create unhandleable amount of probing packets.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>The limitation of this method is that
              </t>
              <ul spacing="normal">
                <li>
                  <t>Some masking mechanism will stop the probing (firewalls, load balancers, port-concealing protocols like Single Packet Authorization that enforce a default drop for unexpected packets), leaving a hidden security posture inside of the system.</t>
                </li>
                <li>
                  <t>Network management cannot know local application components that rests internally in the device and are not exposed over a socket.</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>Tools:</t>
          <ul spacing="normal">
            <li>
              <t>Cisco Mercury project <xref target="MERCURY"/> provides an open source packet capture and analysis tool. It can read network packets, identify metadata of interest, and write out the metadata (including cryptographic-related) in JSON format.</t>
            </li>
          </ul>
        </section>
        <section anchor="traffic-pattern-analysis">
          <name>Traffic Pattern Analysis</name>
          <t>Unlike simulated handshakes that actively query an endpoint, Traffic Pattern Analysis listens passively to live network traffic at strategic aggregation points. It infers cryptographic asset usage from protocol metadata, statistical characteristics, and behaviors without decrypting the underlying data payload.</t>
          <t>Methods of Traffic Pattern Analysis includes:</t>
          <ul spacing="normal">
            <li>
              <t>Listen to unencrypted negotiations like <tt>clientHello</tt>/<tt>serverHello</tt>, Server Name Indication (SNI), response of an unencrypted server digital certificate request, etc.</t>
            </li>
            <li>
              <t>Listen to handshake fingerprints and compare them to existing patterns, as protocol implementations and behaviors are often rigid.</t>
            </li>
            <li>
              <t>Listen to packet length and arrival time, do statistical pattern recognition.</t>
            </li>
          </ul>
          <t>Pros and Cons/Gaps:</t>
          <ul spacing="normal">
            <li>
              <t>Strengths:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Similar to Simulated Handshakes, this kind of method is not intrusive and is agnostic to the design of the target.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>The limitation of this method is that
              </t>
              <ul spacing="normal">
                <li>
                  <t>Negotiation information like <tt>clientHello</tt> <xref target="RFC9849"/> and SNI are tending to be encrypted.</t>
                </li>
                <li>
                  <t>Protocols tend to have constant size packets <xref target="RFC9347"/>.</t>
                </li>
                <li>
                  <t>Alternative routing: network requests/responses could exit through a different routing path.</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="process-identification">
          <name>Process Identification</name>
          <t>Process Identification requires Endpoint Detection and Response (EDR) installed to have cryptographic visibility inside of a system.</t>
          <t>Methods of Process Identification includes:</t>
          <ul spacing="normal">
            <li>
              <t>Kernel-Level System Call Auditing by deploying eBPF programs into the kernel space. These filters can capture kernel events to determine exactly which process (down to PID) have initiated an encrypted network communication.</t>
            </li>
            <li>
              <t>Shared Library and Binary Hooking, by monitoring process load table to see if cryptographic dynamic libraries are loaded into the memory space.</t>
            </li>
            <li>
              <t>Live Memory Scanning, by periodically scanning volatile memory for indication of creation of keys or signatures (as high-entropy memory segments), and then compare them with known patterns.</t>
            </li>
          </ul>
          <t>Pros and Cons/Gaps:</t>
          <ul spacing="normal">
            <li>
              <t>Strengths:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Have deeper visibility for cryptographic assets within devices.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>The limitation of this method is that
              </t>
              <ul spacing="normal">
                <li>
                  <t>Requires loading new software (at least EDR/RDR) to legacy devices.</t>
                </li>
                <li>
                  <t>Potential blind spots due to lower pattern coverage.</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="configuration-extraction">
          <name>Configuration Extraction</name>
          <t>The Configuration Extraction is a bit similar to the source code scanning. This section focuses more on the runtime configurations. In different use cases, the configuration extraction methods differs significantly. This section is to be extended.</t>
          <t>Methods of Configuration Extraction includes:</t>
          <ul spacing="normal">
            <li>
              <t>In network device management, NETCONF and YANG provide a standardized, model-driven management interface that enables programmable configuration and state validation. The network managing platform can define a YANG model and extract configurations from a device.</t>
            </li>
            <li>
              <t>In cloud-native development, general <tt>.yaml</tt> configuration files, <tt>.env</tt> environment variables files, Kubernetes secret manifest, etc, can be extracted by administrative scripts or through management interfaces (e.g., AWS CloudControl, Kubernetes API).</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="inventory">
      <name>Inventory</name>
      <section anchor="overview">
        <name>Overview</name>
        <t>The discovery methods in <xref target="discovery"/> produce information about cryptographic assets in different forms, e.g., CBOMs delivered by vendors or handshake results collected by scanners. To support migration planning, this information needs to be correlated with the network elements and components on which the assets are deployed, and exposed through a standard management interface.</t>
        <t>This section defines the "ietf-network-inventory-crypto" YANG module. It augments the base network inventory model <xref target="I-D.ietf-ivy-network-inventory-yang"/> with a read-only cryptographic inventory of each network element. Like the base model, it is a network model: a network controller uses it to report the cryptographic assets of all network elements under its control, e.g., to an Operations Support System (OSS) or to a higher-level controller, via NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>.</t>
        <t>The module complements CycloneDX CBOM <xref target="CycloneDX"/> rather than replacing it, as summarized in the table below. Asset types, properties, and relationships are aligned with CycloneDX 1.7, so that a vendor CBOM can be imported into a controller and controller data can be exported as a CBOM. This enables network-wide post-quantum cryptography (PQC) readiness assessment.</t>
        <table>
          <name>CBOM Documents and the Inventory Data Model</name>
          <thead>
            <tr>
              <th align="left"> </th>
              <th align="left">CycloneDX CBOM</th>
              <th align="left">This Module</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Form</td>
              <td align="left">Document (JSON, XML)</td>
              <td align="left">Interface (NETCONF, RESTCONF)</td>
            </tr>
            <tr>
              <td align="left">Scope</td>
              <td align="left">One product or software version</td>
              <td align="left">All network elements managed by a controller</td>
            </tr>
            <tr>
              <td align="left">Producer</td>
              <td align="left">Vendor or scanning tool</td>
              <td align="left">Network controller</td>
            </tr>
            <tr>
              <td align="left">Typical use</td>
              <td align="left">Supply chain, audit</td>
              <td align="left">Operations, PQC readiness assessment</td>
            </tr>
            <tr>
              <td align="left">Linked to</td>
              <td align="left">Software components</td>
              <td align="left">Network elements</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="model-structure">
        <name>Model Structure</name>
        <t>The module adds a "crypto-inventory" container to each network element, alongside the "components" list of the base model. An asset can thus refer to the components that implement it, e.g., a Hardware Security Module (HSM), or a cryptographic library (<xref target="relationships"/>). All data nodes of the container are read-only, as the augmented "network-inventory" container is "config false". It contains two lists:</t>
        <dl>
          <dt>"cbom-ref":</dt>
          <dd>
            <t>References to CBOM documents that describe the network element or one of its components. Each entry contains the BOM serial number, version, and specification version, retrieval URIs, a document hash for integrity verification, and the lifecycle phases in which the data was captured.</t>
          </dd>
          <dt>"crypto-asset":</dt>
          <dd>
            <t>A structured list of the cryptographic assets of the network element, as described below.</t>
          </dd>
        </dl>
        <section anchor="cryptographic-assets">
          <name>Cryptographic Assets</name>
          <t>Each asset is identified by an "asset-id" that is unique within the network element. The common attributes are:</t>
          <ul spacing="normal">
            <li>
              <t>"asset-type": one of the four CycloneDX asset types, i.e., algorithm, certificate, protocol, or related cryptographic material (e.g., keys, passwords, and tokens).</t>
            </li>
            <li>
              <t>"uuid", "name", "alias", and "description": reused from the base model.</t>
            </li>
            <li>
              <t>"oid": the object identifier (OID) of the asset, if any.</t>
            </li>
            <li>
              <t>"bom-link": a CycloneDX BOM-Link to the element describing the asset in a CBOM listed in "cbom-ref", for traceability.</t>
            </li>
            <li>
              <t>"usage": the purposes for which the asset is used, i.e., management plane, control plane, data plane, device identity, secure boot, or storage protection. CycloneDX has no equivalent; this network-specific context is needed to prioritize migration.</t>
            </li>
            <li>
              <t>"discovery": the discovery methods (<xref target="discovery"/>), the confidence in the result, and the time at which the asset was last observed.</t>
            </li>
          </ul>
          <t>Type-specific properties are reported in one of four containers, which are present only for the corresponding asset type:</t>
          <ul spacing="normal">
            <li>
              <t>"algorithm-properties": primitive, algorithm family, parameter set, elliptic curve, mode, execution environment (e.g., software or hardware), certification level, classical security level, and NIST quantum security level, where the value 0 indicates a quantum-vulnerable algorithm.</t>
            </li>
            <li>
              <t>"certificate-properties": serial number, subject, issuer, validity period, format, fingerprint, and state (e.g., active or revoked).</t>
            </li>
            <li>
              <t>"related-material-properties": material type (e.g., private key), key state as defined in <xref target="NIST-SP-800-57"/>, size, format, creation and expiration time, and protection mechanism (e.g., HSM or Trusted Platform Module (TPM)).</t>
            </li>
            <li>
              <t>"protocol-properties": protocol type, version, and cipher suites.</t>
            </li>
          </ul>
          <t>Only the CycloneDX properties needed for inventory and PQC readiness assessment are modeled. Further details remain available in the CBOM referenced by "cbom-ref" and can be added by augmentation.</t>
        </section>
        <section anchor="naming">
          <name>Naming</name>
          <t>CycloneDX 1.7 introduces the Cryptography Registry <xref target="CDX-REGISTRY"/>. It defines algorithm families together with naming patterns, and elliptic curves in namespaces of the defining organizations. The Registry evolves independently of the CycloneDX specification. This module uses it as follows:</t>
          <ul spacing="normal">
            <li>
              <t>"algorithm-family" <bcp14>SHOULD</bcp14> contain a family name from the Registry, e.g., "AES", "ML-KEM", or "SM4".</t>
            </li>
            <li>
              <t>The "name" of an algorithm <bcp14>SHOULD</bcp14> follow the naming pattern of its family, e.g., "AES-128-GCM" or "ML-KEM-768".</t>
            </li>
            <li>
              <t>"elliptic-curve" <bcp14>SHOULD</bcp14> contain a Registry curve name in the form "&lt;namespace&gt;/&lt;curve&gt;", e.g., "nist/P-256". A curve can have aliases in other namespaces, e.g., "secg/secp256r1" and "x962/prime256v1" for "nist/P-256"; consumers need to treat aliases as the same curve.</t>
            </li>
            <li>
              <t>A hybrid scheme is reported as an algorithm whose "primitive" is "combiner" and whose "name" is the registered name of the hybrid, e.g., the TLS group name "X25519MLKEM768" <xref target="IANA-TLS"/>. No "algorithm-family" is reported for it; it depends on its component algorithms (<xref target="relationships"/>).</t>
            </li>
          </ul>
        </section>
        <section anchor="relationships">
          <name>Relationships</name>
          <t>Two relationship types are defined, matching the two dependency types of CycloneDX:</t>
          <dl>
            <dt>"provided-by":</dt>
            <dd>
              <t>From an asset to the components that implement or provide it, e.g., from a TLS implementation to a cryptographic library or a main processing unit. CycloneDX expresses this as "dependencies[].provides", in the opposite direction.</t>
            </dd>
            <dt>"depends-on":</dt>
            <dd>
              <t>From an asset to other assets that it uses or is bound to. CycloneDX expresses this as "dependencies[].dependsOn" or "relatedCryptographicAssets". The meaning of the relationship is given by the type of the referenced asset. For example, a certificate depends on an algorithm (its signature algorithm) and on a public key (its subject public key), a protocol depends on a certificate (its credential), and a combiner depends on its component algorithms.</t>
            </dd>
          </dl>
          <t>A relationship is recorded once, at the asset that uses or holds the other asset; reverse relationships are not recorded. The resulting graph is expected to be acyclic.</t>
          <t>Two references are modeled as properties rather than as relationships:</t>
          <ul spacing="normal">
            <li>
              <t>"algorithm-ref" in "protocol-properties/cipher-suite" keeps the grouping of algorithms per cipher suite, as in CycloneDX "cipherSuites[].algorithms".</t>
            </li>
            <li>
              <t>"algorithm-ref" in "related-material-properties/secured-by" identifies the algorithm protecting a key (e.g., a key-wrap algorithm). It is distinct from the algorithm with which the key is used, which is expressed by "depends-on".</t>
            </li>
          </ul>
          <t><xref target="fig-rel"/> shows the relationships of the example in <xref target="example"/>. Unlabeled arrows denote "depends-on", and the labeled arrow denotes "provided-by". Property references, such as "algorithm-ref" in a cipher suite, are not shown.</t>
          <figure anchor="fig-rel">
            <name>Example of Relationships</name>
            <artwork><![CDATA[
  +------------+  provided-by   +-------------+
  |   tls-1    +--------------->|    mpu-1    |
  | (protocol) |                | (component) |
  +--+------+--+                +-------------+
     |      |
     |      +----------------+
     v                       v
  +------------+     +----------------+
  |  dev-cert  |     | x25519mlkem768 |
  +-----+------+     +---+--------+---+
        |                |        |
        v                v        v
  +-------------+   +--------+  +------------+
  | ecdsa-p-256 |   | x25519 |  | ml-kem-768 |
  +-------------+   +--------+  +------------+
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="tree">
        <name>Tree Diagram</name>
        <t><xref target="fig-tree"/> shows the tree diagram of the "ietf-network-inventory-crypto" module.</t>
        <figure anchor="fig-tree">
          <name>Tree Diagram of ietf-network-inventory-crypto</name>
          <artwork><![CDATA[
module: ietf-network-inventory-crypto

  augment /nwi:network-inventory/nwi:network-elements
            /nwi:network-element:
    +--ro crypto-inventory!
       +--ro cbom-ref* [serial-number]
       |  +--ro serial-number      cbom-serial-number
       |  +--ro version?           uint32
       |  +--ro spec-version?      string
       |  +--ro uri*               inet:uri
       |  +--ro document-hash
       |  |  +--ro algorithm?   string
       |  |  +--ro value?       string
       |  +--ro lifecycle-phase*   string
       |  +--ro component-ref?     leafref
       +--ro crypto-asset* [asset-id]
          +--ro asset-id       string
          +--ro asset-type     identityref
          +--ro uuid?          yang:uuid
          +--ro name?          string
          +--ro alias?         string
          +--ro description?   string
          +--ro oid?           yang:object-identifier
          +--ro bom-link?      bom-link
          +--ro usage*         identityref
          +--ro provided-by*   leafref
          +--ro depends-on*    leafref
          +--ro discovery
          |  +--ro method*            identityref
          |  +--ro confidence?        decimal64
          |  +--ro last-discovered?   yang:date-and-time
          +--ro algorithm-properties
          |  +--ro primitive?                     string
          |  +--ro algorithm-family?              algorithm-family
          |  +--ro parameter-set-identifier?      string
          |  +--ro elliptic-curve?                elliptic-curve
          |  +--ro mode?                          string
          |  +--ro execution-environment?         string
          |  +--ro certification-level*           string
          |  +--ro classical-security-level?      uint16
          |  +--ro nist-quantum-security-level?   uint8
          +--ro certificate-properties
          |  +--ro serial-number?        string
          |  +--ro subject-name?         string
          |  +--ro issuer-name?          string
          |  +--ro not-valid-before?     yang:date-and-time
          |  +--ro not-valid-after?      yang:date-and-time
          |  +--ro certificate-format?   string
          |  +--ro fingerprint
          |  |  +--ro algorithm?   string
          |  |  +--ro value?       string
          |  +--ro state?                enumeration
          +--ro related-material-properties
          |  +--ro material-type?     string
          |  +--ro state?             enumeration
          |  +--ro size?              uint32
          |  +--ro format?            string
          |  +--ro creation-date?     yang:date-and-time
          |  +--ro expiration-date?   yang:date-and-time
          |  +--ro secured-by
          |     +--ro mechanism?       string
          |     +--ro algorithm-ref?   leafref
          +--ro protocol-properties
             +--ro protocol-type?   string
             +--ro version?         string
             +--ro cipher-suite* [name]
                +--ro name             string
                +--ro identifier*      string
                +--ro algorithm-ref*   leafref
]]></artwork>
        </figure>
      </section>
      <section anchor="module">
        <name>YANG Module</name>
        <t>This module imports types from <xref target="RFC9911"/> and <xref target="I-D.ietf-ivy-network-inventory-yang"/>. It references <xref target="CycloneDX"/>, <xref target="CDX-REGISTRY"/>, and <xref target="NIST-SP-800-57"/>.</t>
        <figure anchor="fig-module">
          <name>ietf-network-inventory-crypto YANG Module</name>
          <sourcecode type="yang"><![CDATA[
<CODE BEGINS> file "ietf-network-inventory-crypto@2026-10-30.yang"
module ietf-network-inventory-crypto {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-network-inventory-crypto";
  prefix nwic;

  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 9911: Common YANG Data Types";
  }
  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 9911: Common YANG Data Types";
  }
  import ietf-network-inventory {
    prefix nwi;
    reference
      "RFC YYYY: A Base YANG Data Model for Network Inventory";
  }

  organization
    "IETF Network Inventory YANG (ivy) Working Group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/ivy/>
     WG List:  <mailto:ivy@ietf.org>

     Editor:   Chunchi Peter Liu
               <mailto:liuchunchi@huawei.com>

     Editor:   Yufan Fu
               <mailto:fuyufan2@huawei.com>";
  description
    "This module augments the base network inventory model with
     a read-only inventory of the cryptographic assets of each
     network element.  Asset types, properties, and relationships
     are aligned with the Cryptography Bill of Materials (CBOM)
     defined in CycloneDX 1.7 (ECMA-424).

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
     'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
     'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document
     are to be interpreted as described in BCP 14 (RFC 2119)
     (RFC 8174) when, and only when, they appear in all
     capitals, as shown here.

     Copyright (c) 2026 IETF Trust and the persons identified
     as authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Revised BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX; see
     the RFC itself for full legal notices.";

  revision 2026-10-30 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: Cryptographic Asset Discovery and Inventory";
  }

  /*
   * Identities
   */

  identity crypto-asset-type {
    description
      "Base identity for cryptographic asset types.";
    reference
      "ECMA-424: CycloneDX Bill of Materials Specification,
       cryptoProperties.assetType";
  }

  identity algorithm {
    base crypto-asset-type;
    description
      "A cryptographic algorithm, e.g., AES-128-GCM or
       ML-KEM-768.";
  }

  identity certificate {
    base crypto-asset-type;
    description
      "A certificate, e.g., an X.509 device certificate.";
  }

  identity protocol {
    base crypto-asset-type;
    description
      "A cryptographic protocol, e.g., TLS, SSH, or IKEv2.";
  }

  identity related-crypto-material {
    base crypto-asset-type;
    description
      "Material related to algorithms, certificates, or
       protocols, e.g., a key, a password, or a token.";
  }

  identity crypto-usage {
    description
      "Base identity for the purposes for which a cryptographic
       asset is used on a network element.";
  }

  identity management-plane {
    base crypto-usage;
    description
      "Protection of management traffic, e.g., NETCONF over SSH.";
  }

  identity control-plane {
    base crypto-usage;
    description
      "Protection of control plane protocols, e.g., routing
       protocol authentication.";
  }

  identity data-plane {
    base crypto-usage;
    description
      "Protection of user traffic, e.g., IPsec or MACsec.";
  }

  identity device-identity {
    base crypto-usage;
    description
      "Identification and authentication of the device, e.g.,
       using an IDevID certificate.";
  }

  identity secure-boot {
    base crypto-usage;
    description
      "Verification of boot loaders and images during start-up.";
  }

  identity software-integrity {
    base crypto-usage;
    description
      "Verification of software images and patches.";
  }

  identity storage-protection {
    base crypto-usage;
    description
      "Protection of data at rest, e.g., configuration files or
       key stores.";
  }

  identity discovery-method {
    description
      "Base identity for the methods by which a cryptographic
       asset is discovered.";
  }

  identity cbom-declaration {
    base discovery-method;
    description
      "The asset is declared in a CBOM, e.g., one produced by
       static code scanning, binary scanning, or CI/CD
       integration.";
    reference
      "RFC XXXX: Cryptographic Asset Discovery and Inventory,
       Section 4.1";
  }

  identity simulated-handshake {
    base discovery-method;
    description
      "The asset is discovered by initiating protocol
       negotiations with the network element.";
    reference
      "RFC XXXX: Cryptographic Asset Discovery and Inventory,
       Section 4.2.1";
  }

  identity traffic-analysis {
    base discovery-method;
    description
      "The asset is inferred from passively observed traffic.";
    reference
      "RFC XXXX: Cryptographic Asset Discovery and Inventory,
       Section 4.2.2";
  }

  identity process-identification {
    base discovery-method;
    description
      "The asset is identified by monitoring processes on the
       network element.";
    reference
      "RFC XXXX: Cryptographic Asset Discovery and Inventory,
       Section 4.2.3";
  }

  identity configuration-extraction {
    base discovery-method;
    description
      "The asset is identified from the configuration of the
       network element.";
    reference
      "RFC XXXX: Cryptographic Asset Discovery and Inventory,
       Section 4.2.4";
  }

  /*
   * Typedefs
   */

  typedef algorithm-family {
    type string;
    description
      "An algorithm family name registered in the CycloneDX
       Cryptography Registry, e.g., 'AES', 'ML-KEM', or 'SM4'.
       The value SHOULD match the Registry entry exactly.";
    reference
      "CycloneDX Cryptography Registry";
  }

  typedef elliptic-curve {
    type string {
      pattern '[a-z0-9]+/.+';
    }
    description
      "An elliptic curve name registered in the CycloneDX
       Cryptography Registry, in the form '<namespace>/<curve>',
       e.g., 'nist/P-256' or 'oscaa/SM2'.";
    reference
      "CycloneDX Cryptography Registry";
  }

  typedef cbom-serial-number {
    type string {
      pattern 'urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-'
            + '[0-9a-f]{4}-[0-9a-f]{12}';
    }
    description
      "The serial number of a CycloneDX BOM, i.e., a UUID URN.";
    reference
      "ECMA-424: CycloneDX Bill of Materials Specification,
       serialNumber";
  }

  typedef bom-link {
    type string {
      pattern 'urn:cdx:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-'
            + '[0-9a-f]{4}-[0-9a-f]{12}/[1-9][0-9]*#.+';
    }
    description
      "A CycloneDX BOM-Link to an element of a BOM, in the form
       'urn:cdx:<serial-number>/<version>#<bom-ref>'.";
    reference
      "ECMA-424: CycloneDX Bill of Materials Specification,
       BOM-Link";
  }

  /*
   * Groupings
   */

  grouping hash {
    description
      "A hash value and the algorithm that produced it.";
    leaf algorithm {
      type string;
      description
        "The hash algorithm, using the CycloneDX hash algorithm
         names, e.g., 'SHA-256' or 'SHA3-384'.";
    }
    leaf value {
      type string {
        pattern '[0-9a-fA-F]+';
      }
      description
        "The hex-encoded hash value.";
    }
  }

  /*
   * Augmentation
   */

  augment "/nwi:network-inventory/nwi:network-elements"
        + "/nwi:network-element" {
    description
      "Adds the cryptographic inventory to network elements.";
    container crypto-inventory {
      presence
        "Indicates that the server reports the cryptographic
         inventory of this network element.";
      description
        "The cryptographic inventory of the network element.";
      list cbom-ref {
        key "serial-number";
        description
          "References to CBOM documents that describe the
           cryptographic assets of the network element or of one
           of its components.";
        leaf serial-number {
          type cbom-serial-number;
          description
            "The serial number of the CBOM.";
        }
        leaf version {
          type uint32 {
            range "1..max";
          }
          description
            "The version of the CBOM.";
        }
        leaf spec-version {
          type string;
          description
            "The CycloneDX specification version to which the CBOM
             conforms, e.g., '1.7'.";
        }
        leaf-list uri {
          type inet:uri;
          description
            "Locations from which the CBOM can be retrieved.";
        }
        container document-hash {
          description
            "The hash of the CBOM document, for integrity
             verification.";
          uses hash;
        }
        leaf-list lifecycle-phase {
          type string;
          description
            "The lifecycle phases in which the CBOM data was
             captured, using the CycloneDX phase names, e.g.,
             'build' or 'operations'.";
          reference
            "ECMA-424: CycloneDX Bill of Materials Specification,
             metadata.lifecycles";
        }
        leaf component-ref {
          type leafref {
            path "../../../nwi:components/nwi:component"
               + "/nwi:component-id";
          }
          description
            "The component described by the CBOM.  If not present,
             the CBOM describes the whole network element.";
        }
      }
      list crypto-asset {
        key "asset-id";
        description
          "The cryptographic assets of the network element.";
        leaf asset-id {
          type string;
          description
            "An identifier of the asset, unique within the network
             element.";
        }
        leaf asset-type {
          type identityref {
            base crypto-asset-type;
          }
          mandatory true;
          description
            "The type of the asset.";
        }
        uses nwi:basic-common-entity-attributes {
          refine "name" {
            description
              "The name of the asset.  The name of an algorithm
               SHOULD follow the naming pattern of its family in
               the CycloneDX Cryptography Registry, e.g.,
               'AES-128-GCM'.";
          }
        }
        leaf oid {
          type yang:object-identifier;
          description
            "The object identifier of the asset.";
        }
        leaf bom-link {
          type bom-link;
          description
            "A reference to the element describing this asset in a
             CBOM listed in 'cbom-ref'.";
        }
        leaf-list usage {
          type identityref {
            base crypto-usage;
          }
          description
            "The purposes for which the asset is used.";
        }
        leaf-list provided-by {
          type leafref {
            path "../../../nwi:components/nwi:component"
               + "/nwi:component-id";
          }
          description
            "The hardware or software components that implement or
             provide the asset.";
        }
        leaf-list depends-on {
          type leafref {
            path "../../crypto-asset/asset-id";
          }
          description
            "Other assets that this asset uses or is bound to.  The
             meaning of the relationship is given by the type of the
             referenced asset.";
        }
        container discovery {
          description
            "Information on how the asset was discovered.";
          leaf-list method {
            type identityref {
              base discovery-method;
            }
            description
              "The methods by which the asset was discovered.";
          }
          leaf confidence {
            type decimal64 {
              fraction-digits 2;
              range "0..1";
            }
            description
              "The overall confidence in the discovery result, where
               1 means 100% confidence.";
          }
          leaf last-discovered {
            type yang:date-and-time;
            description
              "The time at which the asset was last observed.";
          }
        }
        container algorithm-properties {
          when "derived-from-or-self(../asset-type, "
             + "'nwic:algorithm')";
          description
            "Properties of an algorithm.";
          leaf primitive {
            type string;
            description
              "The cryptographic primitive, using the CycloneDX
               values, e.g., 'block-cipher', 'ae', 'signature',
               'key-agree', 'kem', or 'combiner'.";
          }
          leaf algorithm-family {
            type algorithm-family;
            description
              "The algorithm family.  Not present for combiners.";
          }
          leaf parameter-set-identifier {
            type string;
            description
              "The parameter set, e.g., '128' for AES-128 or '768'
               for ML-KEM-768.";
          }
          leaf elliptic-curve {
            type elliptic-curve;
            description
              "The elliptic curve, if any.";
          }
          leaf mode {
            type string;
            description
              "The mode of operation of a block cipher, using the
               CycloneDX values, e.g., 'gcm' or 'cbc'.";
          }
          leaf execution-environment {
            type string;
            description
              "The environment in which the algorithm is executed,
               using the CycloneDX values, e.g.,
               'software-plain-ram' or 'hardware'.";
          }
          leaf-list certification-level {
            type string;
            description
              "The certifications of the implementation, using the
               CycloneDX values, e.g., 'fips140-3-l1'.";
          }
          leaf classical-security-level {
            type uint16;
            units "bits";
            description
              "The classical security level of the algorithm.";
          }
          leaf nist-quantum-security-level {
            type uint8 {
              range "0..5";
            }
            description
              "The NIST post-quantum security strength category.
               The value 0 indicates that none of the categories is
               met, i.e., the algorithm is quantum-vulnerable.";
            reference
              "ECMA-424: CycloneDX Bill of Materials Specification,
               algorithmProperties.nistQuantumSecurityLevel";
          }
        }
        container certificate-properties {
          when "derived-from-or-self(../asset-type, "
             + "'nwic:certificate')";
          description
            "Properties of a certificate.";
          leaf serial-number {
            type string;
            description
              "The serial number assigned by the issuer.";
          }
          leaf subject-name {
            type string;
            description
              "The subject name.";
          }
          leaf issuer-name {
            type string;
            description
              "The issuer name.";
          }
          leaf not-valid-before {
            type yang:date-and-time;
            description
              "The start of the validity period.";
          }
          leaf not-valid-after {
            type yang:date-and-time;
            description
              "The end of the validity period.";
          }
          leaf certificate-format {
            type string;
            description
              "The certificate format, e.g., 'X.509'.";
          }
          container fingerprint {
            description
              "The fingerprint of the certificate.";
            uses hash;
          }
          leaf state {
            type enumeration {
              enum pre-activation {
                description
                  "Issued but not yet authorized for use.";
              }
              enum active {
                description
                  "Authorized for use.";
              }
              enum suspended {
                description
                  "Use temporarily suspended.";
              }
              enum deactivated {
                description
                  "Not to be used to apply cryptographic
                   protection.";
              }
              enum revoked {
                description
                  "Revoked by the issuer before its expiration.";
              }
              enum destroyed {
                description
                  "Destroyed.";
              }
            }
            description
              "The current state of the certificate.";
            reference
              "ECMA-424: CycloneDX Bill of Materials Specification,
               certificateState";
          }
        }
        container related-material-properties {
          when "derived-from-or-self(../asset-type, "
             + "'nwic:related-crypto-material')";
          description
            "Properties of related cryptographic material.";
          leaf material-type {
            type string;
            description
              "The type of the material, using the CycloneDX values,
               e.g., 'private-key', 'public-key', 'secret-key', or
               'password'.";
          }
          leaf state {
            type enumeration {
              enum pre-activation {
                description
                  "Generated but not yet authorized for use.";
              }
              enum active {
                description
                  "Authorized for use.";
              }
              enum suspended {
                description
                  "Use temporarily suspended.";
              }
              enum deactivated {
                description
                  "Not to be used to apply cryptographic
                   protection.";
              }
              enum compromised {
                description
                  "Known or suspected to be compromised.";
              }
              enum destroyed {
                description
                  "Destroyed.";
              }
            }
            description
              "The state of the key.";
            reference
              "NIST SP 800-57 Part 1 Rev. 5, Section 7";
          }
          leaf size {
            type uint32;
            units "bits";
            description
              "The size of the material.";
          }
          leaf format {
            type string;
            description
              "The encoding format, e.g., 'PEM' or 'DER'.";
          }
          leaf creation-date {
            type yang:date-and-time;
            description
              "The time at which the material was created.";
          }
          leaf expiration-date {
            type yang:date-and-time;
            description
              "The time at which the material expires.";
          }
          container secured-by {
            description
              "The mechanism protecting the material.";
            leaf mechanism {
              type string;
              description
                "The protection mechanism, e.g., 'HSM', 'TPM',
                 'Software', or 'None'.";
            }
            leaf algorithm-ref {
              type leafref {
                path "../../../../crypto-asset/asset-id";
              }
              description
                "The algorithm used to protect the material, e.g.,
                 a key-wrap algorithm.";
            }
          }
        }
        container protocol-properties {
          when "derived-from-or-self(../asset-type, "
             + "'nwic:protocol')";
          description
            "Properties of a protocol.";
          leaf protocol-type {
            type string;
            description
              "The protocol, using the CycloneDX values, e.g.,
               'tls', 'ssh', 'ipsec', 'ike', 'dtls', or 'quic'.";
          }
          leaf version {
            type string;
            description
              "The protocol version, e.g., '1.3'.";
          }
          list cipher-suite {
            key "name";
            description
              "The cipher suites supported by the protocol.";
            leaf name {
              type string;
              description
                "The cipher suite name, e.g.,
                 'TLS_AES_256_GCM_SHA384'.";
            }
            leaf-list identifier {
              type string;
              description
                "The code points of the cipher suite, e.g.,
                 '0x13,0x02'.";
            }
            leaf-list algorithm-ref {
              type leafref {
                path "../../../../crypto-asset/asset-id";
              }
              description
                "The algorithms that make up the cipher suite.";
            }
          }
        }
      }
    }
  }
}
<CODE ENDS>
]]></sourcecode>
        </figure>
      </section>
      <section anchor="operational-considerations">
        <name>Operational Considerations</name>
        <t>As with the base model, this module provides a read-only view of the cryptographic inventory known to the controller. How the controller obtains the information, e.g., by importing CBOMs or by the methods in <xref target="discovery"/>, is outside the scope of this document.</t>
        <t>The inventory needs to be updated when cryptographic assets change, e.g., after a software upgrade, a certificate renewal, or a configuration change. The "last-discovered" leaf allows consumers to detect stale entries.</t>
        <t>Network-wide inventories can be large. Clients can use protocol filtering mechanisms, e.g., subtree or XPath filtering in NETCONF, to retrieve only the data they need, such as the algorithms whose "nist-quantum-security-level" is 0.</t>
      </section>
    </section>
    <section anchor="potentially-related-working-groups">
      <name>Potentially Related Working Groups</name>
      <ul spacing="normal">
        <li>
          <t>IVY -- <xref target="inventory"/> augments the base network inventory model <xref target="I-D.ietf-ivy-network-inventory-yang"/> with cryptographic assets.</t>
        </li>
        <li>
          <t>SCITT -- extend SBOMs to adapt CBOMs.</t>
        </li>
        <li>
          <t>PQUIP -- as a migration guideline.</t>
        </li>
      </ul>
    </section>
    <section anchor="tools-compilation">
      <name>Tools Compilation</name>
      <t>Due to limited time, compiling existing CADI tools remains open and will be done in next version.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document has no further security considerations.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TBD</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC9911">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schönwälder" initials="J." role="editor" surname="Schönwälder"/>
            <date month="December" year="2025"/>
            <abstract>
              <t>This document defines a collection of common data types to be used with the YANG data modeling language. It includes several new type definitions and obsoletes RFC 6991.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9911"/>
          <seriesInfo name="DOI" value="10.17487/RFC9911"/>
        </reference>
        <reference anchor="I-D.ietf-ivy-network-inventory-yang">
          <front>
            <title>A Base YANG Data Model for Network Inventory</title>
            <author fullname="Chaode Yu" initials="C." surname="Yu">
              <organization>Huawei Technologies</organization>
            </author>
            <author fullname="Sergio Belotti" initials="S." surname="Belotti">
              <organization>Nokia</organization>
            </author>
            <author fullname="Jean-Francois Bouquier" initials="J." surname="Bouquier">
              <organization>Vodafone</organization>
            </author>
            <author fullname="Fabio Peruzzini" initials="F." surname="Peruzzini">
              <organization>FiberCop</organization>
            </author>
            <author fullname="Phil Bedard" initials="P." surname="Bedard">
              <organization>Cisco</organization>
            </author>
            <date day="29" month="September" year="2026"/>
            <abstract>
              <t>   This document defines a base YANG data model for reporting network
   inventory.  The scope of this base model is set to be application-
   and technology-agnostic.  The base data model can be augmented with
   application- and technology-specific details.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ivy-network-inventory-yang-20"/>
        </reference>
        <reference anchor="CycloneDX" target="https://ecma-international.org/publications-and-standards/standards/ecma-424/">
          <front>
            <title>ECMA-424: CycloneDX Bill of Materials Specification, 2nd Edition</title>
            <author>
              <organization>Ecma International</organization>
            </author>
            <date year="2025"/>
          </front>
        </reference>
        <reference anchor="CDX-REGISTRY" target="https://cyclonedx.org/registry/cryptography/">
          <front>
            <title>CycloneDX Cryptography Registry</title>
            <author>
              <organization>OWASP CycloneDX</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC7951">
          <front>
            <title>JSON Encoding of Data Modeled with YANG</title>
            <author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>This document defines encoding rules for representing configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using YANG as JavaScript Object Notation (JSON) text.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7951"/>
          <seriesInfo name="DOI" value="10.17487/RFC7951"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="RFC8792">
          <front>
            <title>Handling Long Lines in Content of Internet-Drafts and RFCs</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="E. Auerswald" initials="E." surname="Auerswald"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>This document defines two strategies for handling long lines in width-bounded text content. One strategy, called the "single backslash" strategy, is based on the historical use of a single backslash ('\') character to indicate where line-folding has occurred, with the continuation occurring with the first character that is not a space character (' ') on the next line. The second strategy, called the "double backslash" strategy, extends the first strategy by adding a second backslash character to identify where the continuation begins and is thereby able to handle cases not supported by the first strategy. Both strategies use a self-describing header enabling automated reconstitution of the original content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8792"/>
          <seriesInfo name="DOI" value="10.17487/RFC8792"/>
        </reference>
        <reference anchor="RFC9347">
          <front>
            <title>Aggregation and Fragmentation Mode for Encapsulating Security Payload (ESP) and Its Use for IP Traffic Flow Security (IP-TFS)</title>
            <author fullname="C. Hopps" initials="C." surname="Hopps"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>This document describes a mechanism for aggregation and fragmentation of IP packets when they are being encapsulated in Encapsulating Security Payload (ESP). This new payload type can be used for various purposes, such as decreasing encapsulation overhead for small IP packets; however, the focus in this document is to enhance IP Traffic Flow Security (IP-TFS) by adding Traffic Flow Confidentiality (TFC) to encrypted IP-encapsulated traffic. TFC is provided by obscuring the size and frequency of IP traffic using a fixed-size, constant-send-rate IPsec tunnel. The solution allows for congestion control, as well as nonconstant send-rate usage.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9347"/>
          <seriesInfo name="DOI" value="10.17487/RFC9347"/>
        </reference>
        <reference anchor="RFC9849">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="K. Oku" initials="K." surname="Oku"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="March" year="2026"/>
            <abstract>
              <t>This document describes a mechanism in Transport Layer Security (TLS) for encrypting a message under a server public key.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9849"/>
          <seriesInfo name="DOI" value="10.17487/RFC9849"/>
        </reference>
        <reference anchor="NIST-SP-800-57" target="https://doi.org/10.6028/NIST.SP.800-57pt1r5">
          <front>
            <title>Recommendation for Key Management: Part 1 - General</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2020" month="May"/>
          </front>
          <seriesInfo name="NIST SP" value="800-57 Part 1 Rev. 5"/>
        </reference>
        <reference anchor="IANA-TLS" target="https://www.iana.org/assignments/tls-parameters">
          <front>
            <title>Transport Layer Security (TLS) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="G7" target="https://home.treasury.gov/system/files/136/G7-CEG-Quantum-Roadmap.pdf">
          <front>
            <title>Advancing a Coordinated Roadmap for the Transition to Post-Quantum Cryptography in the Financial Sector</title>
            <author>
              <organization/>
            </author>
            <date year="2026" month="January"/>
          </front>
        </reference>
        <reference anchor="CISAACDI" target="https://www.cisa.gov/sites/default/files/2024-09/Strategy-for-Migrating-to-Automated-PQC-Discovery-and-Inventory-Tools.pdf">
          <front>
            <title>Strategy for Migrating to Automated Post-Quantum Cryptography Discovery and Inventory Tools</title>
            <author>
              <organization/>
            </author>
            <date year="2024" month="August"/>
          </front>
        </reference>
        <reference anchor="NCCOEFAQ" target="https://pages.nist.gov/nccoe-migration-post-quantum-cryptography/FAQ/index.html">
          <front>
            <title>Frequently Asked Questions about Post-Quantum Cryptography</title>
            <author>
              <organization/>
            </author>
            <date year="2026" month="June"/>
          </front>
        </reference>
        <reference anchor="OMBM2302" target="https://www.whitehouse.gov/wp-content/uploads/2022/11/M-23-02-M-Memo-on-Migrating-to-Post-Quantum-Cryptography.pdf">
          <front>
            <title>MEMORANDUM FOR THE HEADS OF EXECUTIVE DEPARTMENTS AND AGENCIES, Migrating to Post-Quantum Cryptography</title>
            <author>
              <organization/>
            </author>
            <date year="2022" month="November"/>
          </front>
        </reference>
        <reference anchor="NIST-SP-1800-38B" target="https://www.nccoe.nist.gov/sites/default/files/2023-12/pqc-migration-nist-sp-1800-38b-preliminary-draft.pdf">
          <front>
            <title>Migration to Post-Quantum Cryptography Quantum Readiness- Cryptographic Discovery</title>
            <author>
              <organization/>
            </author>
            <date year="2023" month="December"/>
          </front>
        </reference>
        <reference anchor="MERCURY" target="https://github.com/cisco/mercury/">
          <front>
            <title>Mercury - network metadata capture and analysis.</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IBMCBOM" target="https://github.com/IBM/CBOM">
          <front>
            <title>CBOM</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="CDXGEN" target="https://github.com/cdxgen/cdxgen">
          <front>
            <title>CycloneDX Generator</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 1250?>

<section anchor="example">
      <name>Example</name>
      <t><xref target="fig-example"/> shows an instance of the module in JSON encoding <xref target="RFC7951"/>. Network element "ne-1" runs a TLS 1.3 implementation that is used on the management plane and provided by component "mpu-1". The TLS implementation depends on a device certificate and on the hybrid key exchange X25519MLKEM768. The key exchange includes ML-KEM-768 (NIST quantum security level 3), but the device certificate still relies on ECDSA with P-256, which is quantum-vulnerable (level 0). AES-256-GCM was imported from the vendor CBOM listed in "cbom-ref".</t>
      <figure anchor="fig-example">
        <name>Example of Cryptographic Inventory</name>
        <artwork><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "ietf-network-inventory:network-inventory": {
    "network-elements": {
      "network-element": [
        {
          "ne-id": "ne-1",
          "components": {
            "component": [
              {
                "component-id": "mpu-1",
                "class": "iana-hardware:module"
              }
            ]
          },
          "ietf-network-inventory-crypto:crypto-inventory": {
            "cbom-ref": [
              {
                "serial-number": "urn:uuid:3e671687-395b-41f5-a30f-\
                   a58921a69b79",
                "version": 1,
                "spec-version": "1.7",
                "uri": ["https://vendor.example.com/ne-1.cdx.json"],
                "lifecycle-phase": ["build"]
              }
            ],
            "crypto-asset": [
              {
                "asset-id": "tls-1",
                "asset-type": "protocol",
                "name": "TLSv1.3",
                "usage": ["management-plane"],
                "provided-by": ["mpu-1"],
                "depends-on": ["dev-cert", "x25519mlkem768"],
                "discovery": {
                  "method": ["simulated-handshake"],
                  "confidence": "1.0"
                },
                "protocol-properties": {
                  "protocol-type": "tls",
                  "version": "1.3",
                  "cipher-suite": [
                    {
                      "name": "TLS_AES_256_GCM_SHA384",
                      "identifier": ["0x13,0x02"],
                      "algorithm-ref": ["aes-256-gcm"]
                    }
                  ]
                }
              },
              {
                "asset-id": "x25519mlkem768",
                "asset-type": "algorithm",
                "name": "X25519MLKEM768",
                "depends-on": ["x25519", "ml-kem-768"],
                "algorithm-properties": {
                  "primitive": "combiner"
                }
              },
              {
                "asset-id": "x25519",
                "asset-type": "algorithm",
                "name": "x25519",
                "algorithm-properties": {
                  "primitive": "key-agree",
                  "algorithm-family": "ECDH",
                  "elliptic-curve": "other/Curve25519",
                  "nist-quantum-security-level": 0
                }
              },
              {
                "asset-id": "ml-kem-768",
                "asset-type": "algorithm",
                "name": "ML-KEM-768",
                "algorithm-properties": {
                  "primitive": "kem",
                  "algorithm-family": "ML-KEM",
                  "parameter-set-identifier": "768",
                  "nist-quantum-security-level": 3
                }
              },
              {
                "asset-id": "aes-256-gcm",
                "asset-type": "algorithm",
                "name": "AES-256-GCM",
                "bom-link": "urn:cdx:3e671687-395b-41f5-a30f-\
                   a58921a69b79/1#aes-256-gcm",
                "discovery": {
                  "method": ["cbom-declaration"]
                },
                "algorithm-properties": {
                  "primitive": "ae",
                  "algorithm-family": "AES",
                  "parameter-set-identifier": "256",
                  "mode": "gcm",
                  "execution-environment": "software-plain-ram",
                  "nist-quantum-security-level": 5
                }
              },
              {
                "asset-id": "dev-cert",
                "asset-type": "certificate",
                "name": "ne-1 device certificate",
                "usage": ["device-identity", "management-plane"],
                "depends-on": ["ecdsa-p-256"],
                "certificate-properties": {
                  "subject-name": "CN=ne-1.example.com",
                  "issuer-name": "CN=Example CA",
                  "not-valid-after": "2028-01-01T00:00:00Z",
                  "certificate-format": "X.509",
                  "state": "active"
                }
              },
              {
                "asset-id": "ecdsa-p-256",
                "asset-type": "algorithm",
                "name": "ECDSA-P-256",
                "algorithm-properties": {
                  "primitive": "signature",
                  "algorithm-family": "ECDSA",
                  "elliptic-curve": "nist/P-256",
                  "nist-quantum-security-level": 0
                }
              }
            ]
          }
        }
      ]
    }
  }
}
]]></artwork>
      </figure>
    </section>
  </back>
  <!-- ##markdown-source:
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
6wAA

-->

</rfc>
