Skip to content

Commit ba9f3a5

Browse files
committed
Clarify comments regarding PASETO and PAE.
- Clarify that the main argument against PASETO is that it is too opinionated to be used generally, rather than it being JSON-specific. - Explain why we do not use PASETO's PAE and give credit to them for the name and idea. This replaces the now obsolete comment saying that we use it verbatim. Thanks @soatok for reporting! More discussion: https://lobste.rs/s/felalp/canonicalization_attacks_against_macs
1 parent cacf247 commit ba9f3a5

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

background.md

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ There is no other simple, foolproof signature scheme that we are aware of.
2727
CA for `x5c`. It also requires a JSON library even if the payload is not
2828
JSON, though this is a minor issue.
2929

30-
* [PASETO] is JSON-specific and too opinionated. For example, it mandates
31-
ed25519 signatures, which may not be useful in all cases.
30+
* [PASETO] is too opinionated to be used in all cases. For example, it
31+
mandates ed25519 signatures, which [Google Cloud KMS] does not support.
32+
PASETO also requires JSON payloads, which may not be desirable in all cases.
3233

3334
The intent of this project is to define a minimal signature scheme that avoids
3435
these issues.
@@ -118,11 +119,20 @@ Rationales for specific decisions:
118119

119120
- See [Motivation](#motivation).
120121

121-
- Why use PAE?
122+
- Why use a pre-authentication encoding (PAE)?
122123

123124
- Because we need an unambiguous way of serializing two fields,
124-
payloadType and payload. PAE is already documented and good enough. No
125-
need to reinvent the wheel.
125+
payloadType and payload. PASETO already solved this problem by
126+
developing its PAE, which is where we got the idea and the name.
127+
[ed25519ctx] uses the same idea, though it was developed independently.
128+
129+
- Why not use PASETO's PAE?
130+
131+
- Originally we did, but the minor difficulty of working with binary
132+
encoding led us to develop a simpler ASCII-based PAE. While we were at
133+
it, we switched to using a fixed number of inputs and added a version
134+
string ("DSSEv1") to allow for future changes.
135+
([more info](https://github.com/secure-systems-lab/dsse/issues/27))
126136

127137
- Why not stay backwards compatible by requiring the payload to always be JSON
128138
with a "_type" field? Then if you want a non-JSON payload, you could simply
@@ -155,6 +165,8 @@ and new envelope format by detecting the presence of the `payload` field (new
155165
format) vs `signed` field (old format).
156166

157167
[Canonical JSON]: http://wiki.laptop.org/go/Canonical_JSON
168+
[ed25519ctx]: https://www.cryptologie.net/article/497/eddsa-ed25519-ed25519-ietf-ed25519ph-ed25519ctx-hasheddsa-pureeddsa-wtf/
169+
[Google Cloud KMS]: https://cloud.google.com/security-key-management
158170
[in-toto]: https://in-toto.io
159171
[JWS]: https://tools.ietf.org/html/rfc7515
160172
[PASETO]: https://github.com/paragonie/paseto/blob/master/docs/01-Protocol-Versions/Version2.md#sig

0 commit comments

Comments
 (0)