Skip to content

Commit c6d71c4

Browse files
authored
Merge pull request #153 from joshuagl/joshuagl/issue-105-repo-section
Consolidate repository related content, describe repository workflow for adding targets
2 parents acac34e + dcd375a commit c6d71c4

File tree

1 file changed

+59
-14
lines changed

1 file changed

+59
-14
lines changed

tuf-spec.md

+59-14
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Title: The Update Framework Specification
33
Shortname: TUF
44
Status: LS
55
Abstract: A framework for securing software update systems.
6-
Date: 2020-12-11
6+
Date: 2021-03-29
77
Editor: Justin Cappos, NYU
88
Editor: Trishank Karthik Kuppusamy, Datadog
99
Editor: Joshua Lock, VMware
@@ -16,7 +16,7 @@ Boilerplate: copyright no, conformance no
1616
Local Boilerplate: header yes
1717
Markup Shorthands: css no, markdown yes
1818
Metadata Include: This version off, Abstract off
19-
Text Macro: VERSION 1.0.17
19+
Text Macro: VERSION 1.0.18
2020
</pre>
2121

2222
Note: We strive to make the specification easy to implement, so if you come
@@ -304,8 +304,8 @@ configured repository.
304304
The root role's private keys MUST be kept very secure and thus should be
305305
kept offline. If less than a threshold of Root keys are compromised, the
306306
repository should revoke trust on the compromised keys. This can be
307-
accomplished with a normal rotation of root keys, covered in section 6.1
308-
(Key management and migration). If a threshold of root keys is compromised,
307+
accomplished with a normal rotation of root keys, covered in section
308+
[[#key-management-and-migration]]. If a threshold of root keys is compromised,
309309
the Root keys should be updated out-of-band, however, the threshold should
310310
be chosen so that this is extremely unlikely. In the unfortunate event that
311311
a threshold of keys are compromised, it is safest to assume that attackers
@@ -689,8 +689,8 @@ The "signed" portion of <a>root.json</a> is as follows:
689689
: <dfn>CONSISTENT_SNAPSHOT</dfn>
690690
::
691691
A boolean indicating whether the repository supports
692-
consistent snapshots. Section 7 goes into more detail on the consequences
693-
of enabling this setting on a repository.
692+
consistent snapshots. Section [[#consistent-snapshots]] goes into more
693+
detail on the consequences of enabling this setting on a repository.
694694

695695
: <dfn for="role">VERSION</dfn>
696696
::
@@ -1321,7 +1321,7 @@ it in the next step.
13211321
11. **If the timestamp and / or snapshot keys have been rotated, then delete the
13221322
trusted timestamp and snapshot metadata files.** This is done
13231323
in order to recover from fast-forward attacks after the repository has been
1324-
compromised and recovered. A _fast-forward attack_ happens when attackers
1324+
compromised and recovered. A *fast-forward attack* happens when attackers
13251325
arbitrarily increase the version numbers of: (1) the timestamp metadata, (2)
13261326
the snapshot metadata, and / or (3) the targets, or a delegated targets,
13271327
metadata file in the snapshot metadata. Please see [the Mercury
@@ -1369,7 +1369,7 @@ it in the next step.
13691369

13701370
## Update the snapshot role ## {#update-snapshot}
13711371

1372-
1. **Download snapshot metadata file** , up to either the number of bytes
1372+
1. **Download snapshot metadata file**, up to either the number of bytes
13731373
specified in the timestamp metadata file, or some Y number of bytes. The value
13741374
for Y is set by the authors of the application using TUF. For example, Y may be
13751375
tens of kilobytes. If consistent snapshots are not used (see
@@ -1505,10 +1505,10 @@ it in the next step.
15051505
metadata file found earlier in step [[#update-targets]]. In either
15061506
case, the client MUST write the file to non-volatile storage as FILENAME.EXT.
15071507

1508-
# 6. Usage # {#usage}
1508+
# Repository operations # {#repository-operations}
15091509

1510-
See [https://theupdateframework.io/](https://theupdateframework.io/) for discussion of
1511-
recommended usage in various situations.
1510+
See [https://theupdateframework.io/](https://theupdateframework.io/) for
1511+
discussion of recommended usage in various situations.
15121512

15131513
## Key management and migration ## {#key-management-and-migration}
15141514

@@ -1550,7 +1550,7 @@ To replace a delegated developer key, the role that delegated to that key
15501550
just replaces that key with another in the signed metadata where the
15511551
delegation is done.
15521552

1553-
# Consistent Snapshots # {#consistent-snapshots}
1553+
## Consistent snapshots ## {#consistent-snapshots}
15541554

15551555
So far, we have considered a TUF repository that is relatively static (in
15561556
terms of how often metadata and target files are updated). The problem is
@@ -1565,7 +1565,7 @@ so-called consistent snapshot. If a client is reading from one consistent
15651565
snapshot, then the repository is free to write another consistent snapshot
15661566
without interrupting that client.
15671567

1568-
## Writing consistent snapshots ## {#writing-consistent-snapshots}
1568+
### Writing consistent snapshots ### {#writing-consistent-snapshots}
15691569

15701570
We now explain how a repository should write metadata and targets to
15711571
produce self-contained consistent snapshots.
@@ -1616,10 +1616,55 @@ released versions of root metadata files should always be provided
16161616
so that outdated clients can update to the latest available root.
16171617

16181618

1619-
## Reading consistent snapshots ## {#reading-consistent-snapshots}
1619+
### Reading consistent snapshots ### {#reading-consistent-snapshots}
16201620

16211621
See [[#detailed-client-workflow]] for more details.
16221622

1623+
## Adding and updating targets ## {#adding-updating-targets}
1624+
1625+
The following subsections describe how to update metadata on the repository
1626+
when adding targets to the repository, or updating existing targets.
1627+
1628+
### Update targets metadata ### {#update-targets-metadata}
1629+
1630+
1. Add the new (or update an existing) <a>TARGETS</a> object in the relevant
1631+
targets metadata (either the top-level targets metadata, or a delegated
1632+
targets metadata).
1633+
2. Increment the <a for="role">VERSION</a> number in the updated targets
1634+
metadata.
1635+
3. Sign the updated targets metadata with at least a <a>THRESHOLD</a> of keys
1636+
for the associated targets role (either the top-level targets role, or a
1637+
delegated targets role).
1638+
4. Write the updated targets metadata, ensuring the targets metadata filename is
1639+
prefixed with the <a for="role">VERSION</a> number if consistent snapshots
1640+
are enabled for the repository.
1641+
1642+
### Update snapshot metadata ### {#update-snapshot-metadata}
1643+
1644+
1. Update the <a for="metapath">VERSION</a> number and, when in use,
1645+
<a for="metapath">LENGTH</a> and <a for="metapath">HASHES</a> for any targets
1646+
metadata modified during [[#update-targets-metadata]] within the
1647+
<a>METAFILES</a> object of the snapshot metadata.
1648+
2. Increment the <a for="role">VERSION</a> number of the snapshot metadata.
1649+
3. Sign the snapshot metadata with at least a <a>THRESHOLD</a> of keys for the
1650+
snapshot role.
1651+
4. Write the updated snapshot metadata, ensuring the snapshot metadata filename
1652+
is prefixed with the <a for="role">VERSION</a> number if consistent
1653+
snapshots are enabled for the repository.
1654+
1655+
### Update timestamp metadata ### {#update-timestamp-metadata}
1656+
1657+
1. Update the <a for="metapath">VERSION</a> and, when in use, the
1658+
<a for="metapath">LENGTH</a> and <a for="metapath">HASHES</a> for the
1659+
snapshot metadata within the <a>METAFILES</a> object of the timestamp
1660+
metadata.
1661+
2. Increment the <a for="role">VERSION</a> number of the timestamp metadata.
1662+
3. Sign the timestamp metadata with at least a <a>THRESHOLD</a> of keys for the
1663+
timestamp role.
1664+
4. Write the updated timestamp metadata, ensuring the timestamp metadata
1665+
filename is prefixed with the <a for="role">VERSION</a> number if consistent
1666+
snapshots are enabled for the repository.
1667+
16231668
# Future directions and open questions # {#future-directions-and-open-questions}
16241669

16251670
## Support for bogus clocks ## {#support-for-bogus-clocks}

0 commit comments

Comments
 (0)