@@ -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