Skip to content

Commit 9da1787

Browse files
committed
Fix inconsistency in root key migration paragraph
Updates an outdated paragraph in section 6.1 that explained how root keys are rotated by backwards-verifying signatures from the latest root file available on the repository back to the latest root file available on the client. The correct (new) workflow, which is also described in step 1 of the client application workflow of section 5, performs verification in a forward-directed manner, i.e. starting at the latest root on the client and going forward to the latest root on the repo.
1 parent 8cc883d commit 9da1787

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed

tuf-spec.md

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,22 +1292,23 @@ non-volatile storage as FILENAME.EXT.
12921292
role. When replacing root keys, an application will sign the new root.json
12931293
file with both the new and old root keys. Any time such a change is
12941294
required, the root.json file is versioned and accessible by version number,
1295-
e.g., 3.root.json. Clients update the set of trusted root keys by requesting
1296-
the current root.json and all previous root.json versions, until one is
1297-
found that has been signed by a threshold of keys that the client already
1298-
trusts. This is to ensure that outdated clients remain able to update,
1299-
without requiring all previous root keys to be kept to sign new root.json
1300-
metadata.
1301-
1302-
In the event that the keys being updated are root keys, it is important to
1303-
note that the new root.json must at least be signed by the keys listed as
1304-
root keys in the previous version of root.json, up to the threshold listed
1305-
for root in the previous version of root.json. If this is not the case,
1306-
clients will (correctly) not validate the new root.json file. For example,
1307-
if there is a 1.root.json that has threshold 2 and a 2.root.json that has
1308-
threshold 3, 2.root.json MUST be signed by at least 2 keys defined in
1309-
1.root.json and at least 3 keys defined in 2.root.json. See step 1 in
1310-
Section 5.1 for more details.
1295+
e.g., 3.root.json.
1296+
1297+
Clients that have outdated root keys can update to the latest set of trusted
1298+
root keys, by incrementally downloading all intermediate root metadata
1299+
files, and verifying that each root metadata at a given version is signed by
1300+
a threshold of keys defined in the previous version of root, and a threshold
1301+
of keys defined in that given version of root.
1302+
For example, if there is a 1.root.json that has threshold 2 and a
1303+
2.root.json that has threshold 3, 2.root.json MUST be signed by at least 2
1304+
keys defined in 1.root.json and at least 3 keys defined in 2.root.json.
1305+
The client starts the root keys update update process with the latest
1306+
version of root metadata available on the client, and stops when no newer
1307+
root metadata is available from the repository. This ensures that an
1308+
outdated client can always correctly re-trace the chain of trust across
1309+
multiple root key updates, even if the latest set of root keys on the client
1310+
dates back multiple root metadata versions. See step 1 of the client
1311+
application workflow in Section 5 for more details.
13111312

13121313
To replace a delegated developer key, the role that delegated to that key
13131314
just replaces that key with another in the signed metadata where the

0 commit comments

Comments
 (0)