Skip to content

Commit be62a29

Browse files
committed
Add TAP-17: Remove Signature Wrapper from the TUF Specification
Signed-off-by: Aditya Sirish <[email protected]>
1 parent 49dcf1d commit be62a29

File tree

2 files changed

+111
-0
lines changed

2 files changed

+111
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
* [TAP 14: Managing TUF Versions](tap14.md)
1919
* [TAP 15: Succinct hashed bin delegations](tap15.md)
2020
* [TAP 16: Snapshot Merkle Trees](tap16.md)
21+
* [TAP 17: Remove Signature Wrapper from the TUF Specification](tap17.md)
2122

2223
## Rejected
2324

tap17.md

+110
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
* TAP: 17
2+
* Title: Remove Signature Wrapper from the TUF Specification
3+
* Version: 1
4+
* Last-Modified: 11/11/2021
5+
* Author: Aditya Sirish A Yelgundhalli, Marina Moore
6+
* Type: Standardization
7+
* Status: Draft
8+
* Content-Type: markdown
9+
* Created: 30/04/2021
10+
* Requires: TAP-11, TAP-14
11+
* +TUF-Version:
12+
* +Post-History:
13+
14+
# Abstract
15+
16+
This TUF Augmentation Proposal (TAP) proposes removing the definition of a
17+
specific signature wrapper and key definitions, and instead defines certain
18+
properties a wrapper must have. Further, it suggests POUF-1 as an example
19+
implementors can refer to when choosing to generate TUF metadata.
20+
21+
# Specification
22+
23+
The TUF specification as of v1.0.25 uses a custom signature wrapper. At the
24+
time of authoring this document, the primary reference implementation written
25+
in Python also generates TUF metadata using the same signature wrapper.
26+
27+
However, TUF does not mandate the use of this signature wrapper, nor any
28+
specific metaformat. Indeed,
29+
[TAP-11, "Using POUFs for Interoperability"](https://github.com/theupdateframework/taps/blob/master/tap11.md)
30+
enables adopters to make their own decisions for their implementations, and
31+
provides a mechanism for them to document their decisions.
32+
[POUF-1](/POUFS/reference-POUF/pouf1.md) is the POUF for the official reference
33+
implementation, and it seems like the obvious choice for this information to be
34+
specified.
35+
36+
Section 4.2 of the TUF specification, titled "File formats: general principles"
37+
may be replaced by a description of the properties that any signature wrapper used
38+
by a TUF implementation must provide. Some important properties:
39+
40+
* SHOULD include an authenticated payload type
41+
* SHOULD avoid depending on canonicalization for security
42+
* SHOULD NOT require the verifier to parse the payload before verifying
43+
* SHOULD NOT require the inclusion of signing key algorithms in the signature
44+
* MUST support the inclusion of multiple signatures in a file
45+
* SHOULD support a hint indicating what signing key was used, i.e., a KEYID
46+
47+
The presence of an authenticated payload type can be valuable for a project like TUF,
48+
with multiple implementations and derivatives. Indeed, every POUF that describes an
49+
implementation MUST choose a unique payload type, ensuring that there is no confusion
50+
about which implementation generated some piece of metadata.
51+
52+
# Motivation
53+
54+
TAP-11 introduced the concept of POUFs but the TUF specification continues to
55+
specify example formats, namely those used by the reference implementation as
56+
of June 2021. These definitions are essentially replicated in POUF-1, which is
57+
meant to be the authoritative source for information about the reference
58+
implementation. By replacing these definitions with *properties* that a wrapper
59+
must possess, the specification can aid adopters with the development of their
60+
implementations and the POUF can serve as an example. In this scenario, both
61+
documents are serving the purpose originally envisioned for them.
62+
63+
Further, the examples used in the specification are from the old signature
64+
wrapper that includes certain side effects:
65+
* it requires canonicalization before signature verification
66+
* it does not allow for distinguishing different implementations that may have
67+
slightly different formats, i.e., it's missing a payload type
68+
69+
# Rationale
70+
71+
Moving the signature wrapper details out of the specification, and instead
72+
requiring adopters to refer to POUFs for specifics of an implementation ensures
73+
a clean separation between implementation details and the TUF specification.
74+
Indeed, it also ensures that the focus of the reader is on only the TUF
75+
primitives rather than burdening them with the specifics of the signature
76+
wrapper.
77+
78+
# Security Analysis
79+
80+
Any implementations that build on the properties listed in this document
81+
will have their security enhanced.
82+
83+
# Backwards Compatibility
84+
85+
The changes proposed in this TAP are backwards compatible with respect to the
86+
TUF specification. However, for implementations looking to switch to a
87+
signature wrapper with the properties described here, the change may be
88+
backwards incompatible. In these instances, the implementations SHOULD set a
89+
transition period during which they support both old-style and new-style
90+
envelopes. This transition period MUST be clearly communicated to their users
91+
using their standard channels.
92+
[TAP-14, "Managing TUF Versions"](https://github.com/theupdateframework/taps/blob/master/tap14.md)
93+
contains some useful information about distributing metadata in multiple formats
94+
that can be used during the transition period.
95+
96+
# Augmented Reference Implementation
97+
98+
TODO: POUF-1 will be updated separately, along with the implementation itself.
99+
See POUF-1 for details about the reference implementation.
100+
101+
# Copyright
102+
103+
This document has been placed in the public domain.
104+
105+
# References
106+
107+
* [TAP-11](https://github.com/theupdateframework/taps/blob/master/tap11.md)
108+
* [TAP-14](https://github.com/theupdateframework/taps/blob/master/tap14.md)
109+
* [File formats in TUF Specification](https://theupdateframework.github.io/specification/latest/index.html#file-formats-general-principles)
110+
* [POUF-1](/POUFS/reference-POUF/pouf1.md)

0 commit comments

Comments
 (0)