Skip to content

Security: VoltageGPU/voltage-verify

Security

SECURITY.md

Security policy

voltage-verify is a verifier. The bugs that matter are the ones that make it accept evidence it should reject: a signature check that can be skipped, a commitment that can be recomputed without the hardware noticing, a policy claim that is read but not enforced, a collateral document accepted without its signature.

Reporting

Write to contact@voltagegpu.com with the subject voltage-verify security. Include the bundle or the minimal input that triggers the behaviour, the version (voltage-verify --version) and what you expected. You will get a human answer within two working days, a fix or a documented limitation within thirty, and credit in the changelog if you want it.

Please do not open a public issue for a bypass before it is fixed.

Scope

In scope: everything under src/voltage_verify, the bundle format, the documented checks in docs/WHAT_IT_PROVES.md.

Out of scope: the security of Intel TDX or NVIDIA confidential computing themselves, the availability of Intel's PCS or NVIDIA's NRAS, and the attest command running on a machine that is already compromised at the hypervisor level (that is what the hardware proofs detect).

What the tool pins

  • Intel SGX Root CA, by SHA-256 fingerprint, shipped in the package (src/voltage_verify/data/intel_sgx_root_ca.pem).
  • NVIDIA NRAS issuer https://nras.attestation.nvidia.com.
  • Two NRAS intermediates, by SHA-256 of their public keys (src/voltage_verify/nvidia.py, NRAS_TRUSTED_SPKI_SHA256): "NVIDIA Attestation Service GPU Intermediate 004" (fd32837f954e2c45db073105166dfe6985ae0480bb113fba63b091a75affe896) and, since 0.2.3, "NVIDIA Attestation Service GPU Intermediate 005" (ba14d00377699189b6762c22c744a9dbdc62aa9396097ada7150426c6ff39afc). Both are issued by NVIDIA's root "NVIDIA Attestation Service CA 001", which the tool does not ship or check. Signing keys are taken from the JWKS embedded in the bundle at attestation time, and only through their x5c chain: the leaf must be issued by one of these intermediates, name NVIDIA Corporation, hold exactly the JWK's key and have been valid when the token was issued. A key id listed twice is refused. Online, NVIDIA's live JWKS (fetched over TLS) can add the intermediates it presents, to survive a rotation; it never supplies a signing key.
  • Accepted JWT algorithms: ES384 and ES256 only, on the matching curve. none, HMAC and RSA are rejected.

Supported versions

Only the latest release gets security fixes. 0.2.1 and earlier accept a quote from a TD in debug mode, and 0.2.0 and earlier trust NVIDIA signing keys that the bundle itself supplies (see CHANGELOG.md, 0.2.2 and 0.2.1): upgrade.

There aren't any published security advisories