2
2
3
3
Last modified: ** 29 September 2020**
4
4
5
- Version: ** 1.0.7 **
5
+ Version: ** 1.0.8 **
6
6
7
7
We strive to make the specification easy to implement, so if you come across
8
8
any inconsistencies or experience any difficulty, do let us know by sending an
@@ -1121,15 +1121,18 @@ repo](https://github.com/theupdateframework/specification/issues).
1121
1121
* ** 1.6** . ** Set the trusted root metadata file** to the new root metadata
1122
1122
file.
1123
1123
1124
- * ** 1.7** . ** Repeat steps 1.1 to 1.7** .
1124
+ * ** 1.7** . ** Persist root metadata.** The client MUST write the file to
1125
+ non-volatile storage as FILENAME.EXT (e.g. root.json).
1125
1126
1126
- * ** 1.8** . ** Check for a freeze attack.** The latest known time should be
1127
+ * ** 1.8** . ** Repeat steps 1.1 to 1.8** .
1128
+
1129
+ * ** 1.9** . ** Check for a freeze attack.** The latest known time should be
1127
1130
lower than the expiration timestamp in the trusted root metadata file
1128
1131
(version N). If the trusted root metadata file has expired, abort the update
1129
1132
cycle, report the potential freeze attack. On the next update cycle, begin
1130
1133
at step 0 and version N of the root metadata file.
1131
1134
1132
- * ** 1.9 ** . ** If the timestamp and / or snapshot keys have been rotated, then
1135
+ * ** 1.10 ** . ** If the timestamp and / or snapshot keys have been rotated, then
1133
1136
delete the trusted timestamp and snapshot metadata files.** This is done in
1134
1137
order to recover from fast-forward attacks after the repository has been
1135
1138
compromised and recovered. A _ fast-forward attack_ happens when attackers
@@ -1139,15 +1142,14 @@ repo](https://github.com/theupdateframework/specification/issues).
1139
1142
paper] ( https://ssl.engineering.nyu.edu/papers/kuppusamy-mercury-usenix-2017.pdf )
1140
1143
for more details.
1141
1144
1142
- * ** 1.10 ** . ** Set whether consistent snapshots are used as per the trusted
1145
+ * ** 1.11 ** . ** Set whether consistent snapshots are used as per the trusted
1143
1146
root metadata file** (see Section 4.3).
1144
1147
1145
1148
** 2** . ** Download the timestamp metadata file** , up to X number of bytes
1146
1149
(because the size is unknown). The value for X is set by the authors of the
1147
1150
application using TUF. For example, X may be tens of kilobytes. The filename
1148
1151
used to download the timestamp metadata file is of the fixed form FILENAME.EXT
1149
- (e.g., timestamp.json). The client MUST write the file to non-volatile storage
1150
- as FILENAME.EXT.
1152
+ (e.g., timestamp.json).
1151
1153
1152
1154
* ** 2.1** . ** Check signatures.** The new timestamp metadata file must have
1153
1155
been signed by a threshold of keys specified in the trusted root metadata
@@ -1173,6 +1175,9 @@ as FILENAME.EXT.
1173
1175
file. If the new timestamp metadata file has expired, discard it, abort the
1174
1176
update cycle, and report the potential freeze attack.
1175
1177
1178
+ * ** 2.4** . ** Persist timestamp metadata.** The client MUST write the file to
1179
+ non-volatile storage as FILENAME.EXT (e.g. timestamp.json).
1180
+
1176
1181
** 3** . ** Download snapshot metadata file** , up to either the number of bytes
1177
1182
specified in the timestamp metadata file, or some Y number of bytes. The value
1178
1183
for Y is set by the authors of the application using TUF. For example, Y may be
@@ -1181,8 +1186,7 @@ Section 7), then the filename used to download the snapshot metadata file is of
1181
1186
the fixed form FILENAME.EXT (e.g., snapshot.json). Otherwise, the filename is
1182
1187
of the form VERSION_NUMBER.FILENAME.EXT (e.g., 42.snapshot.json), where
1183
1188
VERSION_NUMBER is the version number of the snapshot metadata file listed in
1184
- the timestamp metadata file. In either case, the client MUST write the file to
1185
- non-volatile storage as FILENAME.EXT.
1189
+ the timestamp metadata file.
1186
1190
1187
1191
* ** 3.1** . ** Check against timestamp metadata.** The hashes and version
1188
1192
number of the new snapshot metadata file MUST match the hashes (if any) and
@@ -1210,6 +1214,9 @@ non-volatile storage as FILENAME.EXT.
1210
1214
file. If the new snapshot metadata file is expired, discard it, abort the
1211
1215
update cycle, and report the potential freeze attack.
1212
1216
1217
+ * ** 3.5** . ** Persist snapshot metadata.** The client MUST write the file to
1218
+ non-volatile storage as FILENAME.EXT (e.g. snapshot.json).
1219
+
1213
1220
** 4** . ** Download the top-level targets metadata file** , up to either the
1214
1221
number of bytes specified in the snapshot metadata file, or some Z number of
1215
1222
bytes. The value for Z is set by the authors of the application using TUF. For
@@ -1218,8 +1225,7 @@ Section 7), then the filename used to download the targets metadata file is of
1218
1225
the fixed form FILENAME.EXT (e.g., targets.json). Otherwise, the filename is
1219
1226
of the form VERSION_NUMBER.FILENAME.EXT (e.g., 42.targets.json), where
1220
1227
VERSION_NUMBER is the version number of the targets metadata file listed in the
1221
- snapshot metadata file. In either case, the client MUST write the file to
1222
- non-volatile storage as FILENAME.EXT.
1228
+ snapshot metadata file.
1223
1229
1224
1230
* ** 4.1** . ** Check against snapshot metadata.** The hashes and version
1225
1231
number of the new targets metadata file MUST match the hashes (if any) and
@@ -1239,30 +1245,33 @@ non-volatile storage as FILENAME.EXT.
1239
1245
the new targets metadata file is expired, discard it, abort the update cycle,
1240
1246
and report the potential freeze attack.
1241
1247
1242
- * ** 4.4** . ** Perform a preorder depth-first search for metadata about the
1248
+ * ** 4.4** . ** Persist targets metadata.** The client MUST write the file to
1249
+ non-volatile storage as FILENAME.EXT (e.g. targets.json).
1250
+
1251
+ * ** 4.5** . ** Perform a preorder depth-first search for metadata about the
1243
1252
desired target, beginning with the top-level targets role.** Note: If
1244
1253
any metadata requested in steps 4.4.1 - 4.4.2.3 cannot be downloaded nor
1245
1254
validated, end the search and report that the target cannot be found.
1246
1255
1247
- * ** 4.4 .1** . If this role has been visited before, then skip this role (so
1256
+ * ** 4.5 .1** . If this role has been visited before, then skip this role (so
1248
1257
that cycles in the delegation graph are avoided). Otherwise, if an
1249
1258
application-specific maximum number of roles have been visited, then go to
1250
1259
step 5 (so that attackers cannot cause the client to waste excessive
1251
1260
bandwidth or time). Otherwise, if this role contains metadata about the
1252
1261
desired target, then go to step 5.
1253
1262
1254
- * ** 4.4 .2** . Otherwise, recursively search the list of delegations in order
1263
+ * ** 4.5 .2** . Otherwise, recursively search the list of delegations in order
1255
1264
of appearance.
1256
1265
1257
- * ** 4.4 .2.1** . If the current delegation is a multi-role delegation,
1266
+ * ** 4.5 .2.1** . If the current delegation is a multi-role delegation,
1258
1267
recursively visit each role, and check that each has signed exactly the
1259
1268
same non-custom metadata (i.e., length and hashes) about the target (or
1260
1269
the lack of any such metadata).
1261
1270
1262
- * ** 4.4 .2.2** . If the current delegation is a terminating delegation,
1271
+ * ** 4.5 .2.2** . If the current delegation is a terminating delegation,
1263
1272
then jump to step 5.
1264
1273
1265
- * ** 4.4 .2.3** . Otherwise, if the current delegation is a non-terminating
1274
+ * ** 4.5 .2.3** . Otherwise, if the current delegation is a non-terminating
1266
1275
delegation, continue processing the next delegation, if any. Stop the
1267
1276
search, and jump to step 5 as soon as a delegation returns a result.
1268
1277
0 commit comments