@@ -1292,22 +1292,29 @@ non-volatile storage as FILENAME.EXT.
1292
1292
role. When replacing root keys, an application will sign the new root.json
1293
1293
file with both the new and old root keys. Any time such a change is
1294
1294
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.
1311
1318
1312
1319
To replace a delegated developer key, the role that delegated to that key
1313
1320
just replaces that key with another in the signed metadata where the
0 commit comments