Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added TAP for TUF Version Management #107

Merged
merged 41 commits into from
Aug 18, 2020
Merged
Changes from 5 commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
950dc60
added TAP 12 draft
mnm678 Dec 20, 2018
cc9f318
clarified client update
mnm678 Jan 7, 2019
1622a14
removed tap number for draft tap
mnm678 Mar 19, 2019
b348546
added clarifications about location of version numbers and semantic v…
mnm678 May 2, 2019
a80ab21
add intermediate root metadata for root metadata format changes
mnm678 May 22, 2019
03f7e59
added details and clarifications
mnm678 Jun 5, 2019
8c4c1a3
minor edits
mnm678 Jun 6, 2019
6de5c5d
fix link
mnm678 Jun 6, 2019
0b71af6
Added detail and reorganized sections
mnm678 Jun 10, 2019
2c3fcd9
clarifications and link to implementation
mnm678 Jul 4, 2019
1375ce5
added clarifications and example about how spec-version updates are h…
mnm678 Jul 5, 2019
156897b
minor edits
mnm678 Jul 5, 2019
0c178cf
Changes to address special cases.
mnm678 Jul 15, 2019
4bb95ee
Added use cases and description of directory structure
mnm678 Jul 22, 2019
87d57c2
clarifications and minor edits
mnm678 Aug 20, 2019
48cc83a
added some description
mnm678 Aug 22, 2019
986b3e3
added clarifications and grammar fixes
mnm678 Aug 26, 2019
f5999be
fix backward compatibility description
mnm678 Aug 27, 2019
3055189
add more rationale
mnm678 Oct 3, 2019
124e82f
add clarifications and security analysis
mnm678 Oct 8, 2019
468c6b8
Formatting changes
mnm678 Oct 10, 2019
2b7e8d7
clarifications to the multiple repositories case
mnm678 Oct 18, 2019
c9912d5
rework intro sections
mnm678 Oct 31, 2019
c1921b7
minor edits and fixes to abstract and rationale
mnm678 Nov 6, 2019
5ba968f
Apply suggestions from code review
mnm678 Jan 3, 2020
30202de
Added clarification based on review.
mnm678 Jan 3, 2020
9790a0c
Apply suggestions from code review
mnm678 Jan 14, 2020
4cee0bd
Added clarifications based on review. Especially:
mnm678 Jan 23, 2020
e927183
Add clarifications, especially:
mnm678 Feb 10, 2020
3f78127
Apply suggestions from code review
mnm678 Jul 9, 2020
cb81016
Update example as TUF is on version 1.0.x
mnm678 Jul 16, 2020
817e993
spec to specification and other minor edits for consistency and accuracy
mnm678 Jul 20, 2020
161db51
update with semantic versioning implementation link
mnm678 Jul 20, 2020
f218b82
add deprecation_timestamp field for targets metadata
mnm678 Jul 20, 2020
94183f9
Apply suggestions from code review
mnm678 Jul 21, 2020
d75e5c9
replace deprecation_timestamp with becomes_obsolete
mnm678 Jul 21, 2020
3fe4e52
additionally add becomes_obsolete to the timestamp metadata
mnm678 Jul 21, 2020
a6b3105
move becomes_obsolete to root
mnm678 Jul 24, 2020
b5d3bd9
Add clarifications from review
mnm678 Aug 6, 2020
b6b04e9
Add TAP number 14 to the version management TAP
mnm678 Aug 7, 2020
c933d87
Merge branch 'master' into tuf-versions
mnm678 Aug 7, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions candidate-tuf-versions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
* TAP:
* Title: Managing TUF Versions
* Version: 1
* Last-Modified: 19-December-2018
* Author: Marina Moore, Justin Cappos
* Status: Draft
* Content-Type: text/markdown
* Created: 19-December-2018

# Abstract

This TAP clarifies how to manage updates to the TUF spec that include non-backwards compatible (breaking) changes. Breaking changes mean that a client and server must implement the changes at the same time in order to continue functioning as expected. This TAP will define a procedure for TUF clients to ensure that their version of the TUF spec is compatible with the metadata they download.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This TAP clarifies how to manage updates to the TUF spec that include non-backwards compatible (breaking) changes. Breaking changes mean that a client and server must implement the changes at the same time in order to continue functioning as expected. This TAP will define a procedure for TUF clients to ensure that their version of the TUF spec is compatible with the metadata they download.
This TAP clarifies how to manage updates to the TUF spec that include non-backwards compatible (breaking) changes. Breaking changes mean that a client and server must implement the changes at the same time in order to continue functioning as expected. This TAP defines a procedure for TUF clients to ensure that their version of the TUF spec is compatible with the metadata they download.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is server the right term or is it repo?


# Motivation

Various TAPs, including TAPs 3 and 8 include changes that will make clients using the old version of the spec incompatible with servers using the new version. This TAP defines a procedure to ensure that clients are not missing important features to ensure the security of updates. This TAP will need to be implemented by clients before they update to a version of TUF that is not backwards compatible.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If a new version of TUF supports a new, optional metadata field, does this require a major or minor version number bump?


# Rationale

This TAP clarifies that spec versions should be based on [semantic versioning](https://semver.org/), with version numbers in the format MAJOR.MINOR.PATCH. This is a standard format used in other open source projects, and makes the version numbers consistent and easily understood.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This TAP clarifies that spec versions should be based on [semantic versioning](https://semver.org/), with version numbers in the format MAJOR.MINOR.PATCH. This is a standard format used in other open source projects, and makes the version numbers consistent and easily understood.
This TAP clarifies that spec versions should be based on [semantic versioning](https://semver.org/), with version numbers in the format MAJOR.MINOR.PATCH. This is a standard format used in other open source projects, and makes the meaning of a version number change consistent and easily understood.


Breaking changes should only occur during a major release of the TUF spec (1.x.x to 2.x.x). The client should check the major version in the root metadata when the root metadata is downloaded. If a new major version is found the client must update to the new spec-version before performing any software updates.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Breaking changes should only occur during a major release of the TUF spec (1.x.x to 2.x.x). The client should check the major version in the root metadata when the root metadata is downloaded. If a new major version is found the client must update to the new spec-version before performing any software updates.
Breaking changes should only occur during a major release of the TUF spec (e.g., 1.x.x to 2.x.x). The client should check the major version in the root metadata when the root metadata is downloaded. If a new major version is found the client must update to the new spec-version before performing any software updates.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If there has been a breaking change, how does the client know where to locate the version number?


# Specification

The root metadata already contains the TUF spec-version. After downloading the root metadata, the client shall compare the spec-version in the root metadata (server spec-version) with the spec-version of the local client (client spec-version). The client shall then proceed as described below.

To allow for changes to the format of root metadata, an intermediate root metadata file will be used. This intermediate root metadata file will contain the new spec-version, but will be formatted according to the old specification. After a client updates to the new spec-version, they can download the root metadata file that follows the intermediate one, and continue with the update. This process will only be used for major spec-version updates.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if there are clients that may be multiple major versions behind?


## Procedure

If the server spec-version is lower than the client spec-version, the client shall terminate the update and report an error.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

needs rationale / clarity


If the major version (the first digit) of the spec-version has been incremented, the client must update itself to a client supporting the same major version before proceeding. This could be an automatic process or an error could be reported, requesting a manual client update.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

10.x.x -> 11.x.x has the same first digit


If a minor version or patch number of the spec-version has been incremented, the client should report this and may update, but can chose to proceed without further action.

## Version Number format

TUF version numbers shall be determined based on [semantic versioning](https://semver.org/). This specification describes version numbers in the format MAJOR.MINOR.PATCH. In semantic versioning, only major changes are non-backwards compatible.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What kind of change falls under MINOR and / or PATCH?


# Security Analysis

There should be minimal security impact. Ensuring that the client is up to date should improve security in the event that a security vulnerability is patched in a release of the spec.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if an attacker can cause a client to change spec versions? How do we know clients are getting a validly updated version of the client code, etc.?


# Backwards Compatibility
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you should mention how current repositories and clients should continue to keep their current metadata and targets directories, for clients that predate this TAP.


This TAP is backwards compatible, and should be implemented before any non-backwards compatible TAPs are released.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about multiple repositories?


# Augmented Reference Implementation

TODO

# Copyright

This document has been placed in the public domain.