|
| 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