What can I help you with?
NVIDIA BlueField BMC Software v25.04

DPU BMC SPDM Attestation via Redfish

The DPU BMC attestation process enables secure verification of device identity and firmware integrity using standardized protocols. This implementation leverages SPDM (Security Protocol and Data Models) over MCTP (Management Component Transport Protocol) to provide remote attestation capabilities via the Redfish API.

Note

For detailed information about the DPU attestation process, measurement descriptions, and reference values, refer to the DPU Attestation documentation.

Get ComponentIntegrity Collection

Copy
Copied!
            

curl -k -u root:'<password>' -H "Content-Type: application/json" -X GET https://<bmc ip>/redfish/v1/ComponentIntegrity

This command returns a collection of all attestation targets in the system.

In DPU BMC, the available attestation targets are:

  • Bluefield_DPU_IRoT – The BlueField IRoT (Initial Root of Trust), a Platform Security Controller (PSC) that stores measurements related to the Arm and NIC components

  • Bluefield_ERoT – The BlueField BMC ERoT (Endpoint Root of Trust), which contains measurements related to the DPU BMC

Get Certificate Chain of Specific Attestation Target

Copy
Copied!
            

curl -k -u root:'<password>' -H "Content-Type: application/json" -X GET https://<bmc ip>/redfish/v1/Chassis/<target-id>/Certificates/CertChain

This command retrieves the certificate chain for a specific attestation target. The response is a JSON structure containing the entire certificate chain, which can be used to verify the authenticity of the component.

Get Measurements from Attestation Target

Copy
Copied!
            

# 1. Request all available measurements curl -k -u root:'<password>' -H "Content-Type: application/json" -X POST \ https://<bmc ip>/redfish/v1/ComponentIntegrity/<target id>/Actions/ComponentIntegrity.SPDMGetSignedMeasurements   # 2. Request specific measurements curl -k -u root:'<password>' -H "Content-Type: application/json" -X POST \ -d '{"SlotId": 0, "MeasurementIndices": [2,5], "Nonce": "d42a0594c5cd5743ee08fe5ec3cf884b1fac4f106879cda98b7d1c51652b04b7"}' \ https://<bmc ip>/redfish/v1/ComponentIntegrity/HGX_IRoT_NIC_0/Actions/ComponentIntegrity.SPDMGetSignedMeasurements

This command retrieves signed measurements from the specified component.

Parameters:

  1. Nonce

    • Description: A unique, randomly generated value used to prevent replay attacks.

    • Format: 32-byte (64-character) hexadecimal string.

    • Usage:

      • Must be generated and provided by the client for each request.

      • Ensures that each request is fresh and secure.

  2. Certificate Slot ID

    • Description: Indicates which slot contains the certificate chain used for signing.

    • Supported Value: 0

    • Default: 0

    • Note: Only Slot 0 is supported, which holds the NVIDIA certificate chain.

  3. Measurement Indices

    • Description: Specifies the measurement indices to request.

    • Format: Array of integers.

    • Default: If omitted, 0xFF is used to request all available measurements.

Handling the Response

This operation is asynchronous and returns a task object rather than the measurement data itself.

Example response:

Copy
Copied!
            

{ "@odata.id": "/redfish/v1/TaskService/Tasks/0", "@odata.type": "#Task.v1_4_3.Task", "Id": "<id>", "TaskState": "Running", "TaskStatus": "OK" }


Monitoring Task Progress

Periodically check the task until completion using:

Copy
Copied!
            

curl -k -u root:'<password>' -H "Content-Type: application/json" \ -X GET https://<bmc ip>/redfish/v1/TaskService/Tasks/<id>

A completed task appears as

Copy
Copied!
            

{ ... "PercentComplete": 100, ... "TaskState": "Completed", "TaskStatus": "OK" }

Get Measurements Response Data

Copy
Copied!
            

curl -k -u root:'<password>' -H "Content-Type: application/json" -X GET \ https://<bmc ip>/redfish/v1/ComponentIntegrity/<target id>/Actions/ComponentIntegrity.SPDMGetSignedMeasurements/data

This command retrieves the signed measurement data previously requested via the SPDMGetSignedMeasurements action.

Example output:

Copy
Copied!
            

{ "HashingAlgorithm": "TPM_ALG_SHA_512", "SignedMeasurements": "<base64 encoded measurements>", "SigningAlgorithm": "TPM_ALG_ECDSA_ECC_NIST_P384", "Version": "1.1.0" }


Each time a new Get Measurements command is issued, a Redfish event log entry is generated.

Example entry:

Copy
Copied!
            

{ "@odata.id": "/redfish/v1/Systems/Bluefield/LogServices/EventLog/Entries/<id>", "@odata.type": "#LogEntry.v1_15_0.LogEntry", "Created": "<date>", "EntryType": "Event", "Id": "<id>", "Message": "Redfish attestation measurements POST request received", "Modified": "<date>", "Name": "System Event Log Entry", "Resolved": false, "Severity": "OK" }

© Copyright 2025, NVIDIA. Last updated on May 5, 2025.