@@ -3,7 +3,7 @@ Title: The Update Framework Specification
3
3
Shortname: TUF
4
4
Status: LS
5
5
Abstract: A framework for securing software update systems.
6
- Date: 2020-12-11
6
+ Date: 2021-03-29
7
7
Editor: Justin Cappos, NYU
8
8
Editor: Trishank Karthik Kuppusamy, Datadog
9
9
Editor: Joshua Lock, VMware
@@ -16,7 +16,7 @@ Boilerplate: copyright no, conformance no
16
16
Local Boilerplate: header yes
17
17
Markup Shorthands: css no, markdown yes
18
18
Metadata Include: This version off, Abstract off
19
- Text Macro: VERSION 1.0.17
19
+ Text Macro: VERSION 1.0.18
20
20
</pre >
21
21
22
22
Note: We strive to make the specification easy to implement, so if you come
@@ -304,8 +304,8 @@ configured repository.
304
304
The root role's private keys MUST be kept very secure and thus should be
305
305
kept offline. If less than a threshold of Root keys are compromised, the
306
306
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,
309
309
the Root keys should be updated out-of-band, however, the threshold should
310
310
be chosen so that this is extremely unlikely. In the unfortunate event that
311
311
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:
689
689
: <dfn >CONSISTENT_SNAPSHOT</dfn >
690
690
::
691
691
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.
694
694
695
695
: <dfn for =" role " >VERSION</dfn >
696
696
::
@@ -1321,7 +1321,7 @@ it in the next step.
1321
1321
11 . ** If the timestamp and / or snapshot keys have been rotated, then delete the
1322
1322
trusted timestamp and snapshot metadata files.** This is done
1323
1323
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
1325
1325
arbitrarily increase the version numbers of: (1) the timestamp metadata, (2)
1326
1326
the snapshot metadata, and / or (3) the targets, or a delegated targets,
1327
1327
metadata file in the snapshot metadata. Please see [ the Mercury
@@ -1369,7 +1369,7 @@ it in the next step.
1369
1369
1370
1370
## Update the snapshot role ## {#update-snapshot}
1371
1371
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
1373
1373
specified in the timestamp metadata file, or some Y number of bytes. The value
1374
1374
for Y is set by the authors of the application using TUF. For example, Y may be
1375
1375
tens of kilobytes. If consistent snapshots are not used (see
@@ -1505,10 +1505,10 @@ it in the next step.
1505
1505
metadata file found earlier in step [[ #update-targets]] . In either
1506
1506
case, the client MUST write the file to non-volatile storage as FILENAME.EXT.
1507
1507
1508
- # 6. Usage # {#usage }
1508
+ # Repository operations # {#repository-operations }
1509
1509
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.
1512
1512
1513
1513
## Key management and migration ## {#key-management-and-migration}
1514
1514
@@ -1550,7 +1550,7 @@ To replace a delegated developer key, the role that delegated to that key
1550
1550
just replaces that key with another in the signed metadata where the
1551
1551
delegation is done.
1552
1552
1553
- # Consistent Snapshots # {#consistent-snapshots}
1553
+ ## Consistent snapshots # # {#consistent-snapshots}
1554
1554
1555
1555
So far, we have considered a TUF repository that is relatively static (in
1556
1556
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
1565
1565
snapshot, then the repository is free to write another consistent snapshot
1566
1566
without interrupting that client.
1567
1567
1568
- ## Writing consistent snapshots ## {#writing-consistent-snapshots}
1568
+ ### Writing consistent snapshots # ## {#writing-consistent-snapshots}
1569
1569
1570
1570
We now explain how a repository should write metadata and targets to
1571
1571
produce self-contained consistent snapshots.
@@ -1616,10 +1616,55 @@ released versions of root metadata files should always be provided
1616
1616
so that outdated clients can update to the latest available root.
1617
1617
1618
1618
1619
- ## Reading consistent snapshots ## {#reading-consistent-snapshots}
1619
+ ### Reading consistent snapshots # ## {#reading-consistent-snapshots}
1620
1620
1621
1621
See [[ #detailed-client-workflow]] for more details.
1622
1622
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
+
1623
1668
# Future directions and open questions # {#future-directions-and-open-questions}
1624
1669
1625
1670
## Support for bogus clocks ## {#support-for-bogus-clocks}
0 commit comments