Skip to content

Commit 16dba58

Browse files
authored
Merge pull request #61 from lukpueh/fix-root-migration-inconsistency
Fix inconsistency in root key migration paragraph
2 parents 8cc883d + 890b383 commit 16dba58

File tree

1 file changed

+23
-16
lines changed

1 file changed

+23
-16
lines changed

tuf-spec.md

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,22 +1292,29 @@ 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 current version of the root metadata is
1300+
signed by a threshold of keys specified by its immediate predecessor as well
1301+
as a threshold of keys specified by itself.
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. The
1305+
client starts the root key update process with the latest version of root
1306+
metadata available on the client, and stops when no version N+1 (where N is
1307+
the latest trusted version) of the root metadata is available from the
1308+
repository. This ensures that an outdated client can always correctly
1309+
re-trace the chain of trust across multiple root key updates, even if the
1310+
latest set of root keys on the client dates back multiple root metadata
1311+
versions. See step 1 of the client application workflow in Section 5 for
1312+
more details.
1313+
1314+
Note that an attacker, who controls the repository, can launch freeze
1315+
attacks by withholding new root metadata. The attacker does not need to
1316+
compromise root keys to do so. However, these freeze attacks are limited by
1317+
the expiration time of the latest root metadata available to the client.
13111318

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

0 commit comments

Comments
 (0)