-
Notifications
You must be signed in to change notification settings - Fork 20
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
Changes from 5 commits
950dc60
cc9f318
1622a14
b348546
a80ab21
03f7e59
8c4c1a3
6de5c5d
0b71af6
2c3fcd9
1375ce5
156897b
0c178cf
4bb95ee
87d57c2
48cc83a
986b3e3
f5999be
3055189
124e82f
468c6b8
2b7e8d7
c9912d5
c1921b7
5ba968f
30202de
9790a0c
4cee0bd
e927183
3f78127
cb81016
817e993
161db51
f218b82
94183f9
d75e5c9
3fe4e52
a6b3105
b5d3bd9
b6b04e9
c933d87
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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. | ||||||
|
||||||
# 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. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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 | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
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?