2
2
3
3
May 10, 2024
4
4
5
- Version 1.0.1
5
+ Version 1.1.0
6
6
7
7
This document describes the protocol/algorithm for creating and verifying DSSE
8
8
signatures, independent of how they are transmitted or stored. For the
@@ -23,6 +23,7 @@ Name | Type | Required | Authenticated
23
23
SERIALIZED_BODY | bytes | Yes | Yes
24
24
PAYLOAD_TYPE | string | Yes | Yes
25
25
KEYID | string | No | No
26
+ EXTENSION | object | No | No
26
27
27
28
* SERIALIZED_BODY: Arbitrary byte sequence to be signed.
28
29
@@ -52,6 +53,20 @@ KEYID | string | No | No
52
53
decisions; it may only be used to narrow the selection of possible keys to
53
54
try.
54
55
56
+ * EXTENSION: Optional, unauthenticated object used to store signature-specific
57
+ information. Extensions are identified by a ` kind ` field that unambiguously
58
+ describes the fields for the extension. The details for each extension and
59
+ its fields must be agreed upon out-of-band by the signer and verifier,
60
+ though some well-known extensions may be [ listed] ( extensions.md ) and defined
61
+ in the DSSE specification. Note that as the extension is unauthenticated,
62
+ it MUST NOT allow the verifier to independently verify the signature. For
63
+ example, the extension MUST NOT be trusted to directly provide the leaf
64
+ public key to verify a signature. Similarly, an extension field that
65
+ contains an X.509 certificate chain MUST NOT be trusted to provide the root
66
+ certificate, but it MAY provide only intermediate certificates.
67
+ * NOTE: The design for signature extensions is currently experimental
68
+ and is subject to change.
69
+
55
70
Functions:
56
71
57
72
* PAE() is the "Pre-Authentication Encoding", where parameters ` type ` and
@@ -77,23 +92,28 @@ Functions:
77
92
Out of band:
78
93
79
94
- Agree on a PAYLOAD_TYPE and cryptographic details, optionally including
80
- KEYID.
95
+ KEYID and EXTENSION .
81
96
82
97
To sign:
83
98
84
99
- Serialize the message according to PAYLOAD_TYPE. Call the result
85
100
SERIALIZED_BODY.
86
101
- Sign PAE(UTF8(PAYLOAD_TYPE), SERIALIZED_BODY). Call the result SIGNATURE.
87
102
- Optionally, compute a KEYID.
88
- - Encode and transmit SERIALIZED_BODY, PAYLOAD_TYPE, SIGNATURE, and KEYID,
89
- preferably using the recommended [JSON envelope](envelope.md).
103
+ - Optionally, include signature specific information as an EXTENSION.
104
+ - Encode and transmit SERIALIZED_BODY, PAYLOAD_TYPE, SIGNATURE, KEYID, and
105
+ EXTENSION, preferably using the recommended [JSON envelope](envelope.md).
90
106
91
107
To verify:
92
108
93
- - Receive and decode SERIALIZED_BODY, PAYLOAD_TYPE, SIGNATURE, and KEYID, such
94
- as from the recommended [JSON envelope](envelope.md). Reject if decoding
95
- fails.
109
+ - Receive and decode SERIALIZED_BODY, PAYLOAD_TYPE, SIGNATURE, KEYID, and
110
+ EXTENSION such as from the recommended [JSON envelope](envelope.md). Reject
111
+ if decoding fails.
96
112
- Optionally, filter acceptable public keys by KEYID.
113
+ - If EXTENSION is set, use its fields to obtain information that MAY be
114
+ required for verification. Reject any significant fields that the verifier
115
+ must establish separately, such as the public key for a signature or a root
116
+ certificate for an X.509 certificate chain.
97
117
- Verify SIGNATURE against PAE(UTF8(PAYLOAD_TYPE), SERIALIZED_BODY). Reject if
98
118
the verification fails.
99
119
- Reject if PAYLOAD_TYPE is not a supported type.
0 commit comments