Safeguard
Supply Chain•

What is a DSSE envelope and why do attestations use it?

DSSE is the signing envelope behind in-toto and Sigstore attestations. Learn the fields, the pre-authentication encoding and the one rule to follow.

Safeguard Security Team
3 min read

A DSSE envelope is a small signed wrapper, short for Dead Simple Signing Envelope, that carries a payload, a type label for that payload, and one or more signatures. Attestations use it because the signature covers both the bytes and the declared type, so a payload cannot be passed off as something else.

What is inside the envelope

The DSSE specification defines a few fields:

FieldPurpose
payloadThe base64 encoded body being signed
payloadTypeA string saying what kind of payload this is
signaturesAn array of signature objects
keyidOptional hint about which key signed
sigThe base64 encoded signature

For attestations, the payload is an in-toto Statement serialized as JSON. The envelope handles authentication and serialization, and the Statement above it binds the claim to an artifact. In-toto describes these as separate layers: envelope, statement, predicate and bundle.

What gets signed

The signature is not made over the raw payload. DSSE defines a pre-authentication encoding, written PAE, and signs that:

PAE(type, body) = "DSSEv1" + SP + LEN(type) + SP + type + SP + LEN(body) + SP + body

Here LEN is the ASCII decimal byte length and SP is a single space. Because the type and the length of each field are inside the signed bytes, the type is authenticated rather than being a loose label next to the signature. The length prefixes also give each field a clear boundary.

The protocol text advises against generic payload types such as application/json, because two applications might share an encoding but read the payload differently. That is a type confusion risk, and a specific type string reduces it.

The rule implementers must follow

The spec says the bytes that were verified must be the same bytes handed to the application. Do not parse the envelope again after verification to pull out the payload. A second parse can disagree with the first, and that gap is where bugs live.

Verification in five steps

  1. Decode the payload, type, signature and key id, and reject on failure.
  2. Optionally narrow the candidate keys using the key id.
  3. Check the signature over PAE of the type and payload.
  4. Reject any payload type you do not support.
  5. Parse the payload according to its type.

DSSE inside Sigstore bundles

A Sigstore bundle can hold a DSSE envelope for attestations. The bundle format requires that such an envelope contains only a single signature, even though DSSE itself allows several.

Where Safeguard fits

Attestations are one input to release decisions. Safeguard's compliance and evidence automation helps keep the records around those decisions organised for audits.

Quick check

Is DSSE a signing algorithm?

No. It is an envelope format and an encoding rule. You still choose the key type and signature algorithm.

Why not just sign the JSON?

Signing raw JSON leaves the type unauthenticated and depends on every verifier serializing it the same way. DSSE signs exact bytes plus the declared type.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.