@@ -3,7 +3,7 @@ Title: The Update Framework Specification
33Shortname: TUF
44Status: LS
55Abstract: A framework for securing software update systems.
6- Date: 2020-12-11
6+ Date: 2021-03-29
77Editor: Justin Cappos, NYU
88Editor: Trishank Karthik Kuppusamy, Datadog
99Editor: Joshua Lock, VMware
@@ -16,7 +16,7 @@ Boilerplate: copyright no, conformance no
1616Local Boilerplate: header yes
1717Markup Shorthands: css no, markdown yes
1818Metadata Include: This version off, Abstract off
19- Text Macro: VERSION 1.0.17
19+ Text Macro: VERSION 1.0.18
2020</pre >
2121
2222Note: We strive to make the specification easy to implement, so if you come
@@ -304,8 +304,8 @@ configured repository.
304304The root role's private keys MUST be kept very secure and thus should be
305305kept offline. If less than a threshold of Root keys are compromised, the
306306repository 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,
309309the Root keys should be updated out-of-band, however, the threshold should
310310be chosen so that this is extremely unlikely. In the unfortunate event that
311311a 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.
1321132111 . ** 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
15501550just replaces that key with another in the signed metadata where the
15511551delegation is done.
15521552
1553- # Consistent Snapshots # {#consistent-snapshots}
1553+ ## Consistent snapshots # # {#consistent-snapshots}
15541554
15551555So far, we have considered a TUF repository that is relatively static (in
15561556terms 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
15651565snapshot, then the repository is free to write another consistent snapshot
15661566without interrupting that client.
15671567
1568- ## Writing consistent snapshots ## {#writing-consistent-snapshots}
1568+ ### Writing consistent snapshots # ## {#writing-consistent-snapshots}
15691569
15701570We now explain how a repository should write metadata and targets to
15711571produce self-contained consistent snapshots.
@@ -1616,10 +1616,55 @@ released versions of root metadata files should always be provided
16161616so 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
16211621See [[ #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