@@ -3,7 +3,7 @@ Title: The Update Framework Specification
3
3
Shortname: TUF
4
4
Status: LS
5
5
Abstract: A framework for securing software update systems.
6
- Date: 2023-03-02
6
+ Date: 2023-04-14
7
7
Editor: Justin Cappos, NYU
8
8
Editor: Trishank Karthik Kuppusamy, Datadog
9
9
Editor: Joshua Lock, Verizon
@@ -16,7 +16,7 @@ Boilerplate: copyright no, conformance no
16
16
Local Boilerplate: header yes
17
17
Markup Shorthands: css no, markdown yes
18
18
Metadata Include: This version off, Abstract off
19
- Text Macro: VERSION 1.0.32
19
+ Text Macro: VERSION 1.0.33
20
20
</pre >
21
21
22
22
Note: We strive to make the specification easy to implement, so if you come
@@ -547,6 +547,12 @@ All signed metadata objects have the format:
547
547
::
548
548
A hex-encoded signature of the canonical form of the metadata for <a for="role">ROLE</a>.
549
549
550
+ Note: The "signatures" list SHOULD only contain one <a >SIGNATURE</a > per
551
+ <a for =" role " >KEYID</a >. This helps prevent multiple signatures by the same key
552
+ being counted erroneously towards the minimum <a >THRESHOLD</a > indicating valid
553
+ metadata. <a >THRESHOLD</a > counting is further described in the relevant steps
554
+ of [[ #detailed-client-workflow]] .
555
+
550
556
### Key objects ### {#file-formats-keys}
551
557
552
558
All <dfn >KEY</dfn > objects have the format:
@@ -1322,11 +1328,18 @@ it in the next step.
1322
1328
example, Y may be 2^10.
1323
1329
1324
1330
4 . ** Check for an arbitrary software attack.** Version N+1 of the root
1325
- metadata file MUST have been signed by: (1) a threshold of keys specified in
1326
- the trusted root metadata file (version N), and (2) a threshold of keys
1327
- specified in the new root metadata file being validated (version N+1). If
1328
- version N+1 is not signed as required, discard it, abort the update cycle,
1329
- and report the signature failure.
1331
+ metadata file MUST have been signed by: (1) a <a >THRESHOLD</a > of keys
1332
+ specified in the trusted root metadata file (version N), and (2) a
1333
+ <a >THRESHOLD</a > of keys specified in the new root metadata file being
1334
+ validated (version N+1). When computing the <a >THRESHOLD</a > each
1335
+ <a >KEY</a > MUST only contribute one <a >SIGNATURE</a >. That is, each
1336
+ <a >SIGNATURE</a > which is counted towards the <a >THRESHOLD</a > MUST have
1337
+ a unique <a >KEYID</a >. Even if a <a >KEYID</a > is listed more than once in the
1338
+ "signatures" list a client MUST NOT count more than one verified
1339
+ <a >SIGNATURE</a > from that <a >KEYID</a > towards the <a >THRESHOLD</a >.
1340
+ If version N+1 is not signed as required, discard it, abort the update cycle,
1341
+ and report the signature failure. On the next update cycle, begin at step
1342
+ [[ #update-root]] and version N of the root metadata file.
1330
1343
1331
1344
5 . ** Check for a rollback attack.** The version number of the new root
1332
1345
metadata (version N+1) MUST be exactly the version in the trusted root
@@ -1372,10 +1385,15 @@ it in the next step.
1372
1385
(e.g., timestamp.json).
1373
1386
1374
1387
2 . ** Check for an arbitrary software attack.** The new timestamp
1375
- metadata file MUST have been signed by a threshold of keys specified in the
1376
- trusted root metadata file. If the new timestamp metadata file is not
1377
- properly signed, discard it, abort the update cycle, and report the signature
1378
- failure.
1388
+ metadata file MUST have been signed by a <a >THRESHOLD</a > of keys specified
1389
+ in the trusted root metadata file. When computing the <a >THRESHOLD</a > each
1390
+ <a >KEY</a > MUST only contribute one <a >SIGNATURE</a >. That is, each
1391
+ <a >SIGNATURE</a > which is counted towards the <a >THRESHOLD</a > MUST have
1392
+ a unique <a >KEYID</a >. Even if a <a >KEYID</a > is listed more than once in the
1393
+ "signatures" list a client MUST NOT count more than one verified
1394
+ <a >SIGNATURE</a > from that <a >KEYID</a > towards the <a >THRESHOLD</a >. If the
1395
+ new timestamp metadata file is not properly signed, discard it, abort the
1396
+ update cycle, and report the signature failure.
1379
1397
1380
1398
3 . ** Check for a rollback attack.**
1381
1399
@@ -1426,10 +1444,15 @@ it in the next step.
1426
1444
new snapshot metadata, abort the update cycle, and report the failure.
1427
1445
1428
1446
3 . ** Check for an arbitrary software attack** . The new snapshot
1429
- metadata file MUST have been signed by a threshold of keys specified in the
1430
- trusted root metadata file. If the new snapshot metadata file is not signed
1431
- as required, discard it, abort the update cycle, and report the signature
1432
- failure.
1447
+ metadata file MUST have been signed by a <a >THRESHOLD</a > of keys specified in
1448
+ the trusted root metadata file. When computing the <a >THRESHOLD</a > each
1449
+ <a >KEY</a > MUST only contribute one <a >SIGNATURE</a >. That is, each
1450
+ <a >SIGNATURE</a > which is counted towards the <a >THRESHOLD</a > MUST have
1451
+ a unique <a >KEYID</a >. Even if a <a >KEYID</a > is listed more than once in the
1452
+ "signatures" list a client MUST NOT count more than one verified
1453
+ <a >SIGNATURE</a > from that <a >KEYID</a > towards the <a >THRESHOLD</a >. If the
1454
+ new snapshot metadata file is not signed as required, discard it, abort the
1455
+ update cycle, and report the signature failure.
1433
1456
1434
1457
4 . ** Check against timestamp role's snapshot version** . The version
1435
1458
number of the new snapshot metadata file MUST match the version number listed
@@ -1477,9 +1500,15 @@ it in the next step.
1477
1500
target metadata, abort the update cycle, and report the failure.
1478
1501
1479
1502
3 . ** Check for an arbitrary software attack** . The new targets
1480
- metadata file MUST have been signed by a threshold of keys specified in the
1481
- trusted root metadata file. If the new targets metadata file is not signed
1482
- as required, discard it, abort the update cycle, and report the failure.
1503
+ metadata file MUST have been signed by a <a >THRESHOLD</a > of keys specified
1504
+ in the trusted root metadata file. When computing the <a >THRESHOLD</a > each
1505
+ <a >KEY</a > MUST only contribute one <a >SIGNATURE</a >. That is, each
1506
+ <a >SIGNATURE</a > which is counted towards the <a >THRESHOLD</a > MUST have a
1507
+ unique <a >KEYID</a >. Even if a <a >KEYID</a > is listed more than once in the
1508
+ "signatures" list a client MUST NOT count more than one verified
1509
+ <a >SIGNATURE</a > from that <a >KEYID</a > towards the <a >THRESHOLD</a >. If the
1510
+ new targets metadata file is not signed as required, discard it, abort the
1511
+ update cycle, and report the failure.
1483
1512
1484
1513
4 . ** Check against snapshot role's targets version** . The version
1485
1514
number of the new targets metadata file MUST match the version number listed
0 commit comments