Privasys
Enclave OSAttestation

X.509 OID Scheme

Reference of the Privasys X.509 OID scheme (version 2) carried by RA-TLS certificates on Enclave OS Mini and Enclave OS Virtual, and of the evidence type identifiers used by the evidence exchange.

All Privasys OIDs live under the Private Enterprise Number arc 1.3.6.1.4.1.65230. The scheme is shared across both Enclave OS editions so that verification libraries work regardless of the TEE backend. This page describes scheme version 2, which accompanies RA-TLS version 2.

The rules of the scheme:

  • One slot, one meaning, on both editions. A number never means one thing on Enclave OS Mini and another on Enclave OS Virtual.
  • Numbers are contiguous within an arc, and a retired slot is never reused.
  • Evidence is never a certificate extension. The DCAP quote and any GPU evidence are served by the evidence exchange on the connection, not embedded in the certificate. Arc 8 only names the evidence types.
  • The app-defined sub-arc root (5.4) never carries a value. Apps publish under it, never at it.

The "v1" column in each table maps the slot to its number in the previous scheme, for reading old certificates and old records. The SDKs parse version 2 only, and a certificate that still carries a version 1 quote extension is rejected as a version 1 leaf.

Arc 1, Platform identity

What runs here, and which instance.

OIDNameEncodingMiniVirtualv1
1.1Runtime Version Hash32 bytes, SHA-256 of the runtime version (Wasmtime on Mini, containerd on Virtual)yesyes2.4
1.2Image ProfileUTF-8 string, "production" or "dev", read from the dm-verity-measured marker /etc/privasys/image-profile. Verifiers reject dev unless explicitly opted in.yesyes2.8
1.3Enclave Instance ID16-byte UUID, the management-service enclave id received at registrationyesyesnew
1.4Platform Ownerreserved for the owner identifier a platform ownership endorsement attests; the endorsement itself is evidence (8.5)nononew

Arc 2, Platform configuration

Operator-chosen inputs of the platform.

OIDNameEncodingMiniVirtualv1
2.1Config Merkle Root32 bytes, root of the platform configuration tree over every configuration input of the platformyesyes1.1
2.2Egress CA Bundle Hash32 bytes, SHA-256 of the outbound trust-anchor bundleyesno2.1
2.3Attestation Servers Hash32 bytes, SHA-256 of the sorted attestation server URL listyesyes2.7
2.4Combined Workloads Hash32 bytes, SHA-256 over the loaded workload setyesyes2.5

Arc 3, Platform keys and state

Key origin and authenticated state of the platform.

OIDNameEncodingMiniVirtualv1
3.1Data Encryption Key OriginUTF-8 string, "byok:<fingerprint>" or "generated" ("vault:<handle>" on vault-keyed machines)noyes2.6
3.2Authenticated State Root40 bytes, the 32-byte Merkle store root followed by a big-endian u64 versionyesno2.6

Slot 2.6 of version 1 meant the key origin on Virtual and the state root on Mini. Version 2 gives each its own slot.

Arc 4, Workload identity

Which app, and which code. These extensions appear in certificates served via SNI routing: each workload (WASM app in Mini, OCI container in Virtual) gets its own leaf certificate.

OIDNameEncodingMiniVirtualv1
4.1Workload App ID16-byte UUID, the management app id (apps.id). Pins which app a workload is: a vault key can be sealed to a specific app (MR_APP) so a same-code peer with a different app id cannot unseal it, dependents select the matching dependency entry by it, and clients read the app id straight off the attested leaf. Stamped by the measured runtime, never self-declared by the workload. Omitted when no app id is supplied (MR_ENCLAVE).yesyes3.6
4.2Workload Code Digest32 bytes, SHA-256 of the WASM bytecode (Mini) or of the OCI manifest (Virtual)yesyes3.2
4.3Workload Image RefUTF-8 string, image reference without digestnoyes3.3

Arc 5, Workload configuration

Configuration of one workload, including the app-defined sub-arc.

OIDNameEncodingMiniVirtualv1
5.1Workload Config Merkle Root32 bytes, root of the per-workload configuration treeyesyes3.1
5.2Workload Configuration Hash32 bytes, runtime-stamped hash of the workload configurationyesyes3.5
5.3Reservedreservednononew
5.4.<n>App-Defined ExtensionsSub-arc for workload-supplied extensions, installed at runtime via the SDK (set-attestation-extension) or pinned at deploy time (for example attested environment variables). Open-ended by design; the root 5.4 never carries a value.yesyes3.5.<n>
5.4.3Clock Key Digestapp-defined, 32 bytes, SHA-256 of the platform monitor's Ed25519 clock key; published only by the instance that runs the platform clock (see Trusted Time)noyesnew
5.4.5Model Digestapp-defined, 32 bytes (Confidential AI)noyes3.5.5
5.4.7Tools Digestapp-defined, 32 bytes (Confidential AI)noyes3.5.7

Arc 6, Workload keys and state

Key source and authenticated state of one workload.

OIDNameEncodingMiniVirtualv1
6.1Workload Key SourceUTF-8 string, "byok:<fingerprint>", "generated" or "vault:<path>"yesyes3.4
6.2Workload State Rootreserved, mirrors 3.2 for per-workload authenticated storesnononew

Arc 7, Trust relationships

Pinned relationships between enclaves. See Attested Dependencies.

OIDNameEncodingMiniVirtualv1
7.1Attested Dependency SetCanonical encoding of the workload's direct dependency identities (per entry: app id, allowed measurements, required OIDs, folded identity). Written by the runtime, never the app.yesyes6.1
7.2Allowed Callersreserved, enforced from the management database todaynononew

Arc 8, Evidence types

Identifiers for the evidence bodies served by the post-handshake evidence exchange. They name the tee value of an attest response and are never certificate extensions.

OIDNameteev1
8.1Intel SGX DCAP quotesgx1.2.840.113741.1.13.1.0 as a certificate extension
8.2Intel TDX DCAP quotetdx1.2.840.113741.1.5.5.1.6 as a certificate extension
8.3AMD SEV-SNP reportsev-snp4.1, never emitted
8.4NVIDIA GPU CC evidencenvidia-gpu5.1
8.5Platform ownership endorsementintel-poenew; reserved until endorsements have a distribution channel

A GPU workload answers with tee: "tdx-gpu": a TDX quote plus a gpu_evidence body, cross-committed through report_data.

Prefixes

PrefixDescription
1.3.6.1.4.1.65230.The whole Privasys private-enterprise arc. Membership of an extension in the verified set is by arc, not by allowlist.
1.3.6.1.4.1.65230.5.4.The sub-arc apps publish attested digests under, through the SDK set-attestation-extension call.

Retired version 1 slots

v1WasNote
1.2.840.113741.1.13.1.0Intel SGX DCAP quote extensionIntel arc. In version 2 the quote travels in the attest response; a leaf that carries it is a version 1 leaf and is rejected.
1.2.840.113741.1.5.5.1.6Intel TDX quote extensionIntel arc. Same status.
2.3WASM apps hashmoved to 2.5 long before version 2
2.9channel-binding markernever emitted
3.5 (literal)legacy model digest on Virtual, configuration hash on Minithe sub-arc root carries no value in version 2; the configuration hash is 5.2
3.7legacy tools digestreplaced by 3.5.7, now 5.4.7
4.1AMD SEV-SNP report extensionevidence type 8.3
5.1NVIDIA GPU CC evidence extensionevidence type 8.4

OID Hierarchy

1.3.6.1.4.1.65230                    Privasys arc
+-- 1.*                              Platform identity
|   +-- 1.1                          Runtime version hash
|   +-- 1.2                          Image profile
|   +-- 1.3                          Enclave instance id
|   +-- 1.4                          Platform owner (reserved)
+-- 2.*                              Platform configuration
|   +-- 2.1                          Config Merkle root
|   +-- 2.2                          Egress CA bundle hash (Mini)
|   +-- 2.3                          Attestation servers hash
|   +-- 2.4                          Combined workloads hash
+-- 3.*                              Platform keys and state
|   +-- 3.1                          Data encryption key origin (Virtual)
|   +-- 3.2                          Authenticated state root (Mini)
+-- 4.*                              Workload identity
|   +-- 4.1                          Workload app id
|   +-- 4.2                          Workload code digest
|   +-- 4.3                          Workload image ref (Virtual)
+-- 5.*                              Workload configuration
|   +-- 5.1                          Workload config Merkle root
|   +-- 5.2                          Workload configuration hash
|   +-- 5.3                          Reserved
|   +-- 5.4                          App-defined sub-arc (root carries no value)
|       +-- 5.4.3                    Clock key digest (platform monitor)
|       +-- 5.4.5                    Model digest (Confidential AI)
|       +-- 5.4.7                    Tools digest (Confidential AI)
+-- 6.*                              Workload keys and state
|   +-- 6.1                          Workload key source
|   +-- 6.2                          Workload state root (reserved)
+-- 7.*                              Trust relationships
|   +-- 7.1                          Attested dependency set
|   +-- 7.2                          Allowed callers (reserved)
+-- 8.*                              Evidence types (never certificate extensions)
    +-- 8.1                          Intel SGX DCAP quote
    +-- 8.2                          Intel TDX DCAP quote
    +-- 8.3                          AMD SEV-SNP report
    +-- 8.4                          NVIDIA GPU CC evidence
    +-- 8.5                          Platform ownership endorsement (reserved)

Verification Strategies

The extensions identify; the evidence exchange proves. A certificate on its own says which runtime, workload and configuration the enclave claims to be running; the quote returned by the evidence exchange proves that the certificate's key was generated inside a TEE with specific measurements, and in challenge mode that the quote belongs to this connection. Extension values are only meaningful once that proof has passed, because the measured runtime that stamps them is what the quote attests.

In addition to the Configuration Merkle Tree roots (2.1 for the platform, 5.1 for a workload), both editions embed individual extensions for common properties. This gives clients two complementary approaches:

  • Full audit: request the configuration manifest and recompute the Merkle root to verify all inputs.
  • Fast-path: check a single extension (for example, "does the workload code digest match my expectation?") without any Merkle computation.
StrategyWhat to checkWhat it proves
Code identity onlyQuote measurements from the evidence exchange, report_data against the leaf keyCorrect runtime binary or image and a key inside it, but configuration unknown
Code + Merkle rootEvidence + 2.1 (and 5.1 on a workload leaf)Code and full configuration verified
Fast-path OIDsEvidence + specific extensions (4.1, 4.2, 6.1, 1.2, ...)Individual properties without a full Merkle audit
Full manifest auditRequest the manifest, recompute 2.1 or 5.1Complete transparency of all inputs

See RA-TLS Certificates: Verification for the step-by-step verification flow.

Edit on GitHub