-
Notifications
You must be signed in to change notification settings - Fork 19
Description
cc @MarkLodato @trishankatdatadog @patricklawsongoogle @haydentherapper @mnm678 @TomHennen
Today, a DSSE signature has two fields: the compulsory sig
field and the optional keyid
field. DSSE does not support embedding signature-specific information (though this has been discussed in #39 and related issues) such as certificate bundles and timestamps. Broadly speaking, there are two ways to add support for such information to the DSSE specification.
Option 1: Adding generic fields
In this option, we add generic support for optional fields. One for certificate bundles (see #50), another for timestamp (see #33) and so on. A signing ecosystem that requires a certificate bundle would use the corresponding generic field.
Pros
- There is one signature format that can be used across signing ecosystems.
Cons
- Generic fields may have different interpretations in different ecosystems, causing usability concerns.
- X.509 envelopes are unified in theory, but heterogenous in practice, so a generic field is unlikely to satisfy everyone. (cc @patricklawsongoogle)
- Could accidentally make DSSE not so dead simple anymore, and open the door to unexpected security issues (one of which due to canonicalisation is the whole reason why DSSE was proposed).
message Signature {
// Signature itself. (In JSON, this is encoded as base64.)
// REQUIRED.
bytes sig = 1;
// *Unauthenticated* hint identifying which public key was used.
// OPTIONAL.
string keyid = 2;
// *Unauthenticated* PEM encoded bundle of intermediate certificates.
// Must not include the root.
// OPTIONAL.
string certs = 3;
// Timestamp from a TSA.
// OPTIONAL.
string tsa_timestamp = 4;
}
Option 2: Supporting ecosystem specific extensions
In this approach, a DSSE signature can be extended with ecosystem specific fields with context-specific definitions. An extension field for sigstore, for example, would have a field for the certificate bundle, another for the Rekor entry ID, and perhaps one to indicate the sigstore instance used. These fields would accompany the default signature fields.
Pros
- Keeps DSSE dead simple for generic use cases, and yet allows for accommodating special use cases without interference.
- Allows for reusing existing semantics like VerificationMaterial for sigstore.
Cons
- Complicates DSSE verifiers that must handle both the generic use cases as well as special ones.
- Every scenario that wants to use X.509 needs to invent their own scheme.
- Special signing envelopes might have their own security issues (but at least it will not affect the generic use case).
message Signature {
// Signature itself. (In JSON, this is encoded as base64.)
// REQUIRED.
bytes sig = 1;
// *Unauthenticated* hint identifying which public key was used.
// OPTIONAL.
string keyid = 2;
Extension extension = 3;
}
message Extension {
string type_ = 1;
google.proto.Struct ext = 2;
}
// With extension name “sigstore”.
message SigstoreExtension {
// *Unauthenticated* PEM-encoded bundle of intermediate certificates.
// Must not include the root.
// OPTIONAL.
string certs = 1;
// Entry ID for Rekor.
// REQUIRED.
string tlog_entry = 2;
// Sigstore instance.
// OPTIONAL.
string sigstore_instance = 3;
}