summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9124.txt
blob: b709913b20a14a3718202bda58000741a7ff2153 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
Internet Engineering Task Force (IETF)                          B. Moran
Request for Comments: 9124                                 H. Tschofenig
Category: Informational                                      Arm Limited
ISSN: 2070-1721                                              H. Birkholz
                                                          Fraunhofer SIT
                                                            January 2022


A Manifest Information Model for Firmware Updates in Internet of Things
                             (IoT) Devices

Abstract

   Vulnerabilities with Internet of Things (IoT) devices have raised the
   need for a reliable and secure firmware update mechanism that is also
   suitable for constrained devices.  Ensuring that devices function and
   remain secure over their service lifetime requires such an update
   mechanism to fix vulnerabilities, update configuration settings, and
   add new functionality.

   One component of such a firmware update is a concise and machine-
   processable metadata document, or manifest, that describes the
   firmware image(s) and offers appropriate protection.  This document
   describes the information that must be present in the manifest.

Status of This Memo

   This document is not an Internet Standards Track specification; it is
   published for informational purposes.

   This document is a product of the Internet Engineering Task Force
   (IETF).  It represents the consensus of the IETF community.  It has
   received public review and has been approved for publication by the
   Internet Engineering Steering Group (IESG).  Not all documents
   approved by the IESG are candidates for any level of Internet
   Standard; see Section 2 of RFC 7841.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   https://www.rfc-editor.org/info/rfc9124.

Copyright Notice

   Copyright (c) 2022 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Revised BSD License text as described in Section 4.e of the
   Trust Legal Provisions and are provided without warranty as described
   in the Revised BSD License.

Table of Contents

   1.  Introduction
   2.  Requirements and Terminology
     2.1.  Requirements Notation
     2.2.  Terminology
   3.  Manifest Information Elements
     3.1.  Version ID of the Manifest Structure
     3.2.  Monotonic Sequence Number
     3.3.  Vendor ID
     3.4.  Class ID
       3.4.1.  Example 1: Different Classes
       3.4.2.  Example 2: Upgrading Class ID
       3.4.3.  Example 3: Shared Functionality
       3.4.4.  Example 4: Rebranding
     3.5.  Precursor Image Digest Condition
     3.6.  Required Image Version List
     3.7.  Expiration Time
     3.8.  Payload Format
     3.9.  Processing Steps
     3.10. Storage Location
       3.10.1.  Example 1: Two Storage Locations
       3.10.2.  Example 2: Filesystem
       3.10.3.  Example 3: Flash Memory
     3.11. Component Identifier
     3.12. Payload Indicator
     3.13. Payload Digests
     3.14. Size
     3.15. Manifest Envelope Element: Signature
     3.16. Additional Installation Instructions
     3.17. Manifest Text Information
     3.18. Aliases
     3.19. Dependencies
     3.20. Encryption Wrapper
     3.21. XIP Address
     3.22. Load-Time Metadata
     3.23. Runtime Metadata
     3.24. Payload
     3.25. Manifest Envelope Element: Delegation Chain
   4.  Security Considerations
     4.1.  Threat Model
     4.2.  Threat Descriptions
       4.2.1.  THREAT.IMG.EXPIRED: Old Firmware
       4.2.2.  THREAT.IMG.EXPIRED.OFFLINE: Offline Device + Old
               Firmware
       4.2.3.  THREAT.IMG.INCOMPATIBLE: Mismatched Firmware
       4.2.4.  THREAT.IMG.FORMAT: The Target Device Misinterprets the
               Type of Payload
       4.2.5.  THREAT.IMG.LOCATION: The Target Device Installs the
               Payload to the Wrong Location
       4.2.6.  THREAT.NET.REDIRECT: Redirection to Inauthentic Payload
               Hosting
       4.2.7.  THREAT.NET.ONPATH: Traffic Interception
       4.2.8.  THREAT.IMG.REPLACE: Payload Replacement
       4.2.9.  THREAT.IMG.NON_AUTH: Unauthenticated Images
       4.2.10. THREAT.UPD.WRONG_PRECURSOR: Unexpected Precursor Images
       4.2.11. THREAT.UPD.UNAPPROVED: Unapproved Firmware
       4.2.12. THREAT.IMG.DISCLOSURE: Reverse Engineering of Firmware
               Image for Vulnerability Analysis
       4.2.13. THREAT.MFST.OVERRIDE: Overriding Critical Manifest
               Elements
       4.2.14. THREAT.MFST.EXPOSURE: Confidential Manifest Element
               Exposure
       4.2.15. THREAT.IMG.EXTRA: Extra Data after Image
       4.2.16. THREAT.KEY.EXPOSURE: Exposure of Signing Keys
       4.2.17. THREAT.MFST.MODIFICATION: Modification of Manifest or
               Payload prior to Signing
       4.2.18. THREAT.MFST.TOCTOU: Modification of Manifest between
               Authentication and Use
     4.3.  Security Requirements
       4.3.1.  REQ.SEC.SEQUENCE: Monotonic Sequence Numbers
       4.3.2.  REQ.SEC.COMPATIBLE: Vendor, Device-Type Identifiers
       4.3.3.  REQ.SEC.EXP: Expiration Time
       4.3.4.  REQ.SEC.AUTHENTIC: Cryptographic Authenticity
       4.3.5.  REQ.SEC.AUTH.IMG_TYPE: Authenticated Payload Type
       4.3.6.  REQ.SEC.AUTH.IMG_LOC: Authenticated Storage Location
       4.3.7.  REQ.SEC.AUTH.REMOTE_LOC: Authenticated Remote Payload
       4.3.8.  REQ.SEC.AUTH.EXEC: Secure Execution
       4.3.9.  REQ.SEC.AUTH.PRECURSOR: Authenticated Precursor Images
       4.3.10. REQ.SEC.AUTH.COMPATIBILITY: Authenticated Vendor and
               Class IDs
       4.3.11. REQ.SEC.RIGHTS: Rights Require Authenticity
       4.3.12. REQ.SEC.IMG.CONFIDENTIALITY: Payload Encryption
       4.3.13. REQ.SEC.ACCESS_CONTROL: Access Control
       4.3.14. REQ.SEC.MFST.CONFIDENTIALITY: Encrypted Manifests
       4.3.15. REQ.SEC.IMG.COMPLETE_DIGEST: Whole Image Digest
       4.3.16. REQ.SEC.REPORTING: Secure Reporting
       4.3.17. REQ.SEC.KEY.PROTECTION: Protected Storage of Signing
               Keys
       4.3.18. REQ.SEC.KEY.ROTATION: Protected Storage of Signing Keys
       4.3.19. REQ.SEC.MFST.CHECK: Validate Manifests prior to
               Deployment
       4.3.20. REQ.SEC.MFST.TRUSTED: Construct Manifests in a Trusted
               Environment
       4.3.21. REQ.SEC.MFST.CONST: Manifest Kept Immutable between
               Check and Use
     4.4.  User Stories
       4.4.1.  USER_STORY.INSTALL.INSTRUCTIONS: Installation
               Instructions
       4.4.2.  USER_STORY.MFST.FAIL_EARLY: Fail Early
       4.4.3.  USER_STORY.OVERRIDE: Override Non-critical Manifest
               Elements
       4.4.4.  USER_STORY.COMPONENT: Component Update
       4.4.5.  USER_STORY.MULTI_AUTH: Multiple Authorizations
       4.4.6.  USER_STORY.IMG.FORMAT: Multiple Payload Formats
       4.4.7.  USER_STORY.IMG.CONFIDENTIALITY: Prevent Confidential
               Information Disclosures
       4.4.8.  USER_STORY.IMG.UNKNOWN_FORMAT: Prevent Devices from
               Unpacking Unknown Formats
       4.4.9.  USER_STORY.IMG.CURRENT_VERSION: Specify Version Numbers
               of Target Firmware
       4.4.10. USER_STORY.IMG.SELECT: Enable Devices to Choose between
               Images
       4.4.11. USER_STORY.EXEC.MFST: Secure Execution Using Manifests
       4.4.12. USER_STORY.EXEC.DECOMPRESS: Decompress on Load
       4.4.13. USER_STORY.MFST.IMG: Payload in Manifest
       4.4.14. USER_STORY.MFST.PARSE: Simple Parsing
       4.4.15. USER_STORY.MFST.DELEGATION: Delegated Authority in
               Manifest
       4.4.16. USER_STORY.MFST.PRE_CHECK: Update Evaluation
       4.4.17. USER_STORY.MFST.ADMINISTRATION: Administration of
               Manifests
     4.5.  Usability Requirements
       4.5.1.  REQ.USE.MFST.PRE_CHECK: Pre-installation Checks
       4.5.2.  REQ.USE.MFST.TEXT: Descriptive Manifest Information
       4.5.3.  REQ.USE.MFST.OVERRIDE_REMOTE: Override Remote Resource
               Location
       4.5.4.  REQ.USE.MFST.COMPONENT: Component Updates
       4.5.5.  REQ.USE.MFST.MULTI_AUTH: Multiple Authentications
       4.5.6.  REQ.USE.IMG.FORMAT: Format Usability
       4.5.7.  REQ.USE.IMG.NESTED: Nested Formats
       4.5.8.  REQ.USE.IMG.VERSIONS: Target Version Matching
       4.5.9.  REQ.USE.IMG.SELECT: Select Image by Destination
       4.5.10. REQ.USE.EXEC: Executable Manifest
       4.5.11. REQ.USE.LOAD: Load-Time Information
       4.5.12. REQ.USE.PAYLOAD: Payload in Manifest Envelope
       4.5.13. REQ.USE.PARSE: Simple Parsing
       4.5.14. REQ.USE.DELEGATION: Delegation of Authority in Manifest
   5.  IANA Considerations
   6.  References
     6.1.  Normative References
     6.2.  Informative References
   Acknowledgements
   Authors' Addresses

1.  Introduction

   Vulnerabilities with Internet of Things (IoT) devices have raised the
   need for a reliable and secure firmware update mechanism that is also
   suitable for constrained devices.  Ensuring that devices function and
   remain secure over their service lifetime requires such an update
   mechanism to fix vulnerabilities, update configuration settings, and
   add new functionality.

   One component of such a firmware update is a concise and machine-
   processable metadata document, or manifest, that describes the
   firmware image(s) and offers appropriate protection.  This document
   describes the information that must be present in the manifest.

   This document describes all the information elements required in a
   manifest to secure firmware updates of IoT devices.  Each information
   element is motivated by user stories and threats it aims to mitigate.
   These threats and user stories are not intended to be an exhaustive
   list of the threats against IoT devices and possible user stories
   that describe how to conduct a firmware update.  Instead, they are
   intended to describe the threats against firmware updates in
   isolation and provide sufficient motivation to specify the
   information elements that cover a wide range of user stories.

   To distinguish information elements from their encoding and
   serialization over the wire, this document presents an information
   model.  RFC 3444 [RFC3444] describes the differences between
   information models and data models.

   Because this document covers a wide range of user stories and a wide
   range of threats, not all information elements apply to all
   scenarios.  As a result, various information elements are optional to
   implement and optional to use, depending on which threats exist in a
   particular domain of application and which user stories are important
   for deployments.

2.  Requirements and Terminology

2.1.  Requirements Notation

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

   Unless otherwise stated, these words apply to the design of the
   manifest format, not its implementation or application.  Hence,
   whenever an information element is declared as "REQUIRED", this
   implies that the manifest format document has to include support for
   it.

2.2.  Terminology

   This document uses terms defined in [RFC9019].  The term "Operator"
   refers to either a device operator or a network operator.

   "Secure time" and "secure clock" refer to a set of requirements on
   time sources.  For local time sources, this primarily means that the
   clock must be monotonically increasing, including across power
   cycles, firmware updates, etc.  For remote time sources, the provided
   time must be both authenticated and guaranteed to be correct to
   within some predetermined bounds, whenever the time source is
   accessible.

   The term "Envelope" (or "Manifest Envelope") is used to describe an
   encoding that allows the bundling of a manifest with related
   information elements that are not directly contained within the
   manifest.

   The term "payload" is used to describe the data that is delivered to
   a device during an update.  This is distinct from a "firmware image",
   as described in [RFC9019], because the payload is often in an
   intermediate state, such as being encrypted, compressed, and/or
   encoded as a differential update.  The payload, taken in isolation,
   is often not the final firmware image.

3.  Manifest Information Elements

   Each manifest information element is anchored in a security
   requirement or a usability requirement.  The manifest elements are
   described below, justified by their requirements.

3.1.  Version ID of the Manifest Structure

   This is an identifier that describes which iteration of the manifest
   format is contained in the structure.  This allows devices to
   identify the version of the manifest data model that is in use.

   This element is REQUIRED.

3.2.  Monotonic Sequence Number

   This element provides a monotonically increasing (unsigned) sequence
   number to prevent malicious actors from reverting a firmware update
   against the policies of the relevant authority.  This number must not
   wrap around.

   For convenience, the monotonic sequence number may be a UTC
   timestamp.  This allows global synchronization of sequence numbers
   without any additional management.

   This element is REQUIRED.

   Implements:  REQ.SEC.SEQUENCE (Section 4.3.1)

3.3.  Vendor ID

   The Vendor ID element helps to distinguish between identically named
   products from different vendors.  The Vendor ID is not intended to be
   a human-readable element.  It is intended for binary match/mismatch
   comparison only.

   Recommended practice is to use version 5 Universally Unique
   Identifiers (UUIDs) [RFC4122] with the vendor's domain name and the
   DNS name space ID.  Other options include type 1 and type 4 UUIDs.

   Fixed-size binary identifiers are preferred because they are simple
   to match, unambiguous in length, explicitly non-parsable, and require
   no issuing authority.  Guaranteed unique integers are preferred
   because they are small and simple to match; however, they may not be
   fixed length, and they may require an issuing authority to ensure
   uniqueness.  Free-form text is avoided because it is variable length,
   prone to error, and often requires parsing outside the scope of the
   manifest serialization.

   If human-readable content is required, it SHOULD be contained in a
   separate manifest information element: Manifest Text Information
   (Section 3.17).

   This element is RECOMMENDED.

   Implements:  REQ.SEC.COMPATIBLE (Section 4.3.2),
      REQ.SEC.AUTH.COMPATIBILITY (Section 4.3.10)

   Here is an example for a domain-name-based UUID.  Vendor A creates a
   UUID based on a domain name it controls, such as vendorId =
   UUID5(DNS, "vendor-a.example").

   Because the DNS infrastructure prevents multiple registrations of the
   same domain name, this UUID is (with very high probability)
   guaranteed to be unique.  Because the domain name is known, this UUID
   is reproducible.  Type 1 and type 4 UUIDs produce similar guarantees
   of uniqueness, but not reproducibility.

   This approach creates a contention when a vendor changes its name or
   relinquishes control of a domain name.  In this scenario, it is
   possible that another vendor would start using that same domain name.
   However, this UUID is not proof of identity; a device's trust in a
   vendor must be anchored in a cryptographic key, not a UUID.

3.4.  Class ID

   A device "Class" is a set of different device types that can accept
   the same firmware update without modification.  It thereby allows
   devices to determine the applicability of the firmware in an
   unambiguous way.  Class IDs must be unique within the scope of a
   Vendor ID.  This is to prevent similarly or identically named devices
   from colliding in their customer's infrastructure.

   Recommended practice is to use version 5 UUIDs [RFC4122] with as much
   information as necessary to define firmware compatibility.  Possible
   information used to derive the Class ID UUID includes:

   *  Model name or number

   *  Hardware revision

   *  Runtime library version

   *  Bootloader version

   *  ROM revision

   *  Silicon batch number

   The Class ID UUID should use the Vendor ID as the name space
   identifier.  Classes may be more fine-grained than is required to
   identify firmware compatibility.  Classes must not be less granular
   than is required to identify firmware compatibility.  Devices may
   have multiple Class IDs.

   The Class ID is not intended to be a human-readable element.  It is
   intended for binary match/mismatch comparison only.  A manifest
   serialization SHOULD NOT permit free-form text content to be used for
   the Class ID.  A fixed-size binary identifier SHOULD be used.

   Some organizations desire to keep the same product naming across
   multiple, incompatible hardware revisions for ease of user
   experience.  If this naming is propagated into the firmware, then
   matching a specific hardware version becomes a challenge.  An opaque,
   non-readable binary identifier has no naming implications and so is
   more likely to be usable for distinguishing among incompatible device
   groupings, regardless of naming.

   Fixed-size binary identifiers are preferred because they are simple
   to match, unambiguous in length, opaque and free from naming
   implications, and explicitly non-parsable.  Free-form text is avoided
   because it is variable length, prone to error, often requires parsing
   outside the scope of the manifest serialization, and may be
   homogenized across incompatible device groupings.

   If the Class ID is not implemented, then each logical device class
   must use a unique trust anchor for authorization.

   This element is RECOMMENDED.

   Implements:  REQ.SEC.COMPATIBLE (Section 4.3.2),
      REQ.SEC.AUTH.COMPATIBILITY (Section 4.3.10)

3.4.1.  Example 1: Different Classes

   Vendor A creates Product Z and Product Y.  The firmware images of
   Products Z and Y are not interchangeable.  Vendor A creates UUIDs as
   follows:

   *  vendorId = UUID5(DNS, "vendor-a.example")

   *  ZclassId = UUID5(vendorId, "Product Z")

   *  YclassId = UUID5(vendorId, "Product Y")

   This ensures that Vendor A's Product Z cannot install firmware for
   Product Y and Product Y cannot install firmware for Product Z.

3.4.2.  Example 2: Upgrading Class ID

   Vendor A creates Product X.  Later, Vendor A adds a new feature to
   Product X, creating Product X v2.  Product X requires a firmware
   update to work with firmware intended for Product X v2.

   Vendor A creates UUIDs as follows:

   *  vendorId = UUID5(DNS, "vendor-a.example")

   *  XclassId = UUID5(vendorId, "Product X")

   *  Xv2classId = UUID5(vendorId, "Product X v2")

   When Product X receives the firmware update necessary to be
   compatible with Product X v2, part of the firmware update changes the
   Class ID to Xv2classId.

3.4.3.  Example 3: Shared Functionality

   Vendor A produces two products: Product X and Product Y.  These
   components share a common core (such as an operating system (OS)) but
   have different applications.  The common core and the applications
   can be updated independently.  To enable X and Y to receive the same
   common core update, they require the same Class ID.  To ensure that
   only Product X receives Application X and only Product Y receives
   Application Y, Product X and Product Y must have different Class IDs.
   The vendor creates Class IDs as follows:

   *  vendorId = UUID5(DNS, "vendor-a.example")

   *  XclassId = UUID5(vendorId, "Product X")

   *  YclassId = UUID5(vendorId, "Product Y")

   *  CommonClassId = UUID5(vendorId, "common core")

   Product X matches against both XclassId and CommonClassId.  Product Y
   matches against both YclassId and CommonClassId.

3.4.4.  Example 4: Rebranding

   Vendor A creates a Product A and its firmware.  Vendor B sells the
   product under its own name as Product B with some customized
   configuration.  The vendors create the Class IDs as follows:

   *  vendorIdA = UUID5(DNS, "vendor-a.example")

   *  classIdA = UUID5(vendorIdA, "Product A-Unlabeled")

   *  vendorIdB = UUID5(DNS, "vendor-b.example")

   *  classIdB = UUID5(vendorIdB, "Product B")

   The product will match against each of these Class IDs.  If Vendor A
   and Vendor B provide different components for the device, the
   implementor may choose to make ID matching scoped to each component.
   Then, the vendorIdA, classIdA match the component ID supplied by
   Vendor A, and the vendorIdB, classIdB match the component ID supplied
   by Vendor B.

3.5.  Precursor Image Digest Condition

   This element provides information about the payload that needs to be
   present on the device for an update to apply.  This may, for example,
   be the case with differential updates.

   This element is OPTIONAL.

   Implements:  REQ.SEC.AUTH.PRECURSOR (Section 4.3.9)

3.6.  Required Image Version List

   Payloads may only be applied to a specific firmware version or
   multiple firmware versions.  For example, a payload containing a
   differential update may be applied only to a specific firmware
   version.

   When a payload applies to multiple versions of firmware, the required
   image version list specifies which firmware versions must be present
   for the update to be applied.  This allows the update author to
   target specific versions of firmware for an update, while excluding
   those to which it should not or cannot be applied.

   This element is OPTIONAL.

   Implements:  REQ.USE.IMG.VERSIONS (Section 4.5.8)

3.7.  Expiration Time

   This element tells a device the time at which the manifest expires
   and should no longer be used.  This element should be used where a
   secure source of time is provided and firmware is intended to expire
   predictably.  This element may also be displayed (e.g., via an app)
   for user confirmation, since users typically have a reliable
   knowledge of the date.

   Special consideration is required for end-of-life if firmware will
   not be updated again -- for example, if a business stops issuing
   updates to a device.  In this case, the last valid firmware should
   not have an expiration time.

   This element is OPTIONAL.

   Implements:  REQ.SEC.EXP (Section 4.3.3)

3.8.  Payload Format

   This element describes the payload format within the signed metadata.
   It is used to enable devices to decode payloads correctly.

   This element is REQUIRED.

   Implements:  REQ.SEC.AUTH.IMG_TYPE (Section 4.3.5),
      REQ.USE.IMG.FORMAT (Section 4.5.6)

3.9.  Processing Steps

   This element provides a representation of the processing steps
   required to decode a payload -- in particular, those that are
   compressed, packed, or encrypted.  The representation must describe
   which algorithms are used and must convey any additional parameters
   required by those algorithms.

   A processing step may indicate the expected digest of the payload
   after the processing is complete.

   This element is RECOMMENDED.

   Implements:  REQ.USE.IMG.NESTED (Section 4.5.7)

3.10.  Storage Location

   This element tells the device where to store a payload within a given
   component.  The device can use this to establish which permissions
   are necessary and the physical storage location to use.

   This element is REQUIRED.

   Implements:  REQ.SEC.AUTH.IMG_LOC (Section 4.3.6)

3.10.1.  Example 1: Two Storage Locations

   A device supports two components: an OS and an application.  These
   components can be updated independently, expressing dependencies to
   ensure compatibility between the components.  The author chooses two
   storage identifiers:

   *  "OS"

   *  "APP"

3.10.2.  Example 2: Filesystem

   A device supports a full-featured filesystem.  The author chooses to
   use the storage identifier as the path at which to install the
   payload.  The payload may be a tarball, in which case it unpacks the
   tarball into the specified path.

3.10.3.  Example 3: Flash Memory

   A device supports flash memory.  The author chooses to make the
   storage identifier the offset where the image should be written.

3.11.  Component Identifier

   In a device with more than one storage subsystem, a storage
   identifier is insufficient to identify where and how to store a
   payload.  To resolve this, a component identifier indicates to which
   part of the storage subsystem the payload shall be placed.

   A serialization may choose to combine the use of a component
   identifier and storage location (Section 3.10).

   This element is OPTIONAL.

   Implements:  REQ.USE.MFST.COMPONENT (Section 4.5.4)

3.12.  Payload Indicator

   This element provides the information required for the device to
   acquire the payload.  This functionality is only needed when the
   target device does not intrinsically know where to find the payload.

   This can be encoded in several ways:

   *  One URI

   *  A list of URIs

   *  A prioritized list of URIs

   *  A list of signed URIs

   This element is OPTIONAL.

   Implements:  REQ.SEC.AUTH.REMOTE_LOC (Section 4.3.7)

3.13.  Payload Digests

   This element contains one or more digests of one or more payloads.
   This allows the target device to ensure authenticity of the
   payload(s) when combined with the Signature (Section 3.15) element.
   A manifest format must provide a mechanism to select one payload from
   a list based on system parameters, such as an execute-in-place (XIP)
   installation address.

   This element is REQUIRED.  Support for more than one digest is
   OPTIONAL.

   Implements:  REQ.SEC.AUTHENTIC (Section 4.3.4), REQ.USE.IMG.SELECT
      (Section 4.5.9)

3.14.  Size

   This element provides the size of the payload in bytes, which informs
   the target device how big of a payload to expect.  Without it,
   devices are exposed to some classes of denial-of-service attacks.

   This element is REQUIRED.

   Implements:  REQ.SEC.AUTH.EXEC (Section 4.3.8)

3.15.  Manifest Envelope Element: Signature

   The signature element contains all the information necessary to
   protect the contents of the manifest against modification and to
   offer authentication of the signer.  Because the signature element
   authenticates the manifest, it cannot be contained within the
   manifest.  Instead, either the manifest is contained within the
   signature element or the signature element is a member of the
   Manifest Envelope and bundled with the manifest.

   The signature element represents the foundation of all security
   properties of the manifest.  Manifests, which are included as
   dependencies by other manifests, should include a signature so that
   the recipient can distinguish between different actors with different
   permissions.

   The signature element must support multiple signers and multiple
   signing algorithms.  A manifest format may allow multiple manifests
   to be covered by a single signature element.

   This element is REQUIRED in non-dependency manifests.

   Implements:  REQ.SEC.AUTHENTIC (Section 4.3.4), REQ.SEC.RIGHTS
      (Section 4.3.11), REQ.USE.MFST.MULTI_AUTH (Section 4.5.5)

3.16.  Additional Installation Instructions

   Additional installation instructions are machine-readable commands
   the device should execute when processing the manifest.  This
   information is distinct from the information necessary to process a
   payload.  Additional installation instructions include information
   such as update timing (for example, install only on Sunday, at 0200),
   procedural considerations (for example, shut down the equipment under
   control before executing the update), and pre- and post-installation
   steps (for example, run a script).  Other installation instructions
   could include requesting user confirmation before installing.

   This element is OPTIONAL.

   Implements:  REQ.USE.MFST.PRE_CHECK (Section 4.5.1)

3.17.  Manifest Text Information

   This is textual information pertaining to the update described by the
   manifest.  This information is for human consumption only.  It MUST
   NOT be the basis of any decision made by the recipient.

   This element is OPTIONAL.

   Implements:  REQ.USE.MFST.TEXT (Section 4.5.2)

3.18.  Aliases

   Aliases provide a mechanism for a manifest to augment or replace URIs
   or URI lists defined by one or more of its dependencies.

   This element is OPTIONAL.

   Implements:  REQ.USE.MFST.OVERRIDE_REMOTE (Section 4.5.3)

3.19.  Dependencies

   This is a list of other manifests that are required by the current
   manifest.  Manifests are identified in an unambiguous way, such as a
   cryptographic digest.

   This element is REQUIRED to support deployments that include both
   multiple authorities and multiple payloads.

   Implements:  REQ.USE.MFST.COMPONENT (Section 4.5.4)

3.20.  Encryption Wrapper

   Encrypting firmware images requires symmetric content encryption
   keys.  The encryption wrapper provides the information needed for a
   device to obtain or locate a key that it uses to decrypt the
   firmware.

   This element is REQUIRED for encrypted payloads.

   Implements:  REQ.SEC.IMG.CONFIDENTIALITY (Section 4.3.12)

3.21.  XIP Address

   In order to support XIP systems with multiple possible base
   addresses, it is necessary to specify which address the payload is
   linked for.

   For example, a microcontroller may have a simple bootloader that
   chooses one of two images to boot.  That microcontroller then needs
   to choose one of two firmware images to install, based on which of
   its two images is older.

   This element is OPTIONAL.

   Implements:  REQ.USE.IMG.SELECT (Section 4.5.9)

3.22.  Load-Time Metadata

   Load-time metadata provides the device with information that it needs
   in order to load one or more images.  This metadata may include any
   of the following:

   *  The source (e.g., non-volatile storage)

   *  The destination (e.g., an address in RAM)

   *  Cryptographic information

   *  Decompression information

   *  Unpacking information

   Typically, loading is done by copying an image from its permanent
   storage location into its active use location.  The metadata allows
   operations such as decryption, decompression, and unpacking to be
   performed during that copy.

   This element is OPTIONAL.

   Implements:  REQ.USE.LOAD (Section 4.5.11)

3.23.  Runtime Metadata

   Runtime metadata provides the device with any extra information
   needed to boot the device.  This may include the entry point of an
   XIP image or the kernel command line to boot a Linux image.

   This element is OPTIONAL.

   Implements:  REQ.USE.EXEC (Section 4.5.10)

3.24.  Payload

   The Payload element is contained within the manifest or Manifest
   Envelope and enables the manifest and payload to be delivered
   simultaneously.  This is used for delivering small payloads, such as
   cryptographic keys or configuration data.

   This element is OPTIONAL.

   Implements:  REQ.USE.PAYLOAD (Section 4.5.12)

3.25.  Manifest Envelope Element: Delegation Chain

   The delegation chain offers enhanced authorization functionality via
   authorization tokens, such as Concise Binary Object Representation
   (CBOR) Web Tokens [RFC8392] with Proof-of-Possession Key Semantics
   [RFC8747].  Each token itself is protected and does not require
   another layer of protection.  Each authorization token typically
   includes a public key or a public key fingerprint; however, this is
   dependent on the tokens used.  Each token MAY include additional
   metadata, such as key usage information.  Because the delegation
   chain is needed to verify the signature, it must be placed in the
   Manifest Envelope, rather than the manifest.

   The first token in any delegation chain MUST be authenticated by the
   recipient's trust anchor.  Each subsequent token MUST be
   authenticated using the previous token.  This allows a recipient to
   discard each antecedent token after it has authenticated the
   subsequent token.  The final token MUST enable authentication of the
   manifest.  More than one delegation chain MAY be used if more than
   one signature is used.  Note that no restriction is placed on the
   encoding order of these tokens; the order of elements is logical
   only.

   This element is OPTIONAL.

   Implements:  REQ.USE.DELEGATION (Section 4.5.14),
      REQ.SEC.KEY.ROTATION (Section 4.3.18)

4.  Security Considerations

   The following subsections describe the threat model, user stories,
   security requirements, and usability requirements.  This section also
   provides the motivations for each of the manifest information
   elements.

   Note that it is worthwhile to recall that a firmware update is, by
   definition, remote code execution.  Hence, if a device is configured
   to trust an entity to provide firmware, it trusts this entity to
   behave correctly.  Many classes of attacks can be mitigated by
   verifying that a firmware update came from a trusted party and that
   no rollback is taking place.  However, if the trusted entity has been
   compromised and distributes attacker-provided firmware to devices,
   then the possibilities for defense are limited.

4.1.  Threat Model

   The following subsections aim to provide information about the
   threats that were considered, the security requirements that are
   derived from those threats, and the fields that permit implementation
   of the security requirements.  This model uses the Spoofing,
   Tampering, Repudiation, Information Disclosure, Denial of Service,
   and Elevation of Privilege (STRIDE) approach [STRIDE].  Each threat
   is classified according to the following:

   *  Spoofing identity

   *  Tampering with data

   *  Repudiation

   *  Information disclosure

   *  Denial of service

   *  Elevation of privilege

   This threat model only covers elements related to the transport of
   firmware updates.  It explicitly does not cover threats outside of
   the transport of firmware updates.  For example, threats to an IoT
   device due to physical access are out of scope.

4.2.  Threat Descriptions

   Many of the threats detailed in this section contain a "threat
   escalation" description.  This explains how the described threat
   might fit together with other threats and produce a high-severity
   threat.  This is important because some of the described threats may
   seem low severity but could be used with others to construct a high-
   severity compromise.

4.2.1.  THREAT.IMG.EXPIRED: Old Firmware

   Classification:  Elevation of Privilege

   An attacker sends an old, but valid, manifest with an old, but valid,
   firmware image to a device.  If there is a known vulnerability in the
   provided firmware image, this may allow an attacker to exploit the
   vulnerability and gain control of the device.

   Threat Escalation:  If the attacker is able to exploit the known
      vulnerability, then this threat can be escalated to all types.

   Mitigated by:  REQ.SEC.SEQUENCE (Section 4.3.1)

4.2.2.  THREAT.IMG.EXPIRED.OFFLINE: Offline Device + Old Firmware

   Classification:  Elevation of Privilege

   An attacker targets a device that has been offline for a long time
   and runs an old firmware version.  The attacker sends an old, but
   valid, manifest to a device with an old, but valid, firmware image.
   The attacker-provided firmware is newer than the installed firmware
   but older than the most recently available firmware.  If there is a
   known vulnerability in the provided firmware image, then this may
   allow an attacker to gain control of a device.  Because the device
   has been offline for a long time, it is unaware of any new updates.
   As such, it will treat the old manifest as the most current.

   The exact mitigation for this threat depends on where the threat
   comes from.  This requires careful consideration by the implementor.
   If the threat is from a network actor, including an on-path attacker,
   or an intruder into a management system, then a user confirmation can
   mitigate this attack, simply by displaying an expiration date and
   requesting confirmation.  On the other hand, if the user is the
   attacker, then an online confirmation system (for example, a trusted
   timestamp server) can be used as a mitigation system.

   Threat Escalation:  If the attacker is able to exploit the known
      vulnerability, then this threat can be escalated to all types.

   Mitigated by:  REQ.SEC.EXP (Section 4.3.3), REQ.USE.MFST.PRE_CHECK
      (Section 4.5.1)

4.2.3.  THREAT.IMG.INCOMPATIBLE: Mismatched Firmware

   Classification:  Denial of Service

   An attacker sends a valid firmware image, for the wrong type of
   device, signed by an actor with firmware installation permission on
   both device types.  The firmware is verified by the device positively
   because it is signed by an actor with the appropriate permission.
   This could have wide-ranging consequences.  For devices that are
   similar, it could cause minor breakage or expose security
   vulnerabilities.  For devices that are very different, it is likely
   to render devices inoperable.

   Mitigated by:  REQ.SEC.COMPATIBLE (Section 4.3.2)

   For example, suppose that two vendors -- Vendor A and Vendor B --
   adopt the same trade name in different geographic regions, and they
   both make products with the same names, or product name matching is
   not used.  This causes firmware from Vendor A to match devices from
   Vendor B.

   If the vendors are the firmware authorities, then devices from Vendor
   A will reject images signed by Vendor B, since they use different
   credentials.  However, if both devices trust the same author, then
   devices from Vendor A could install firmware intended for devices
   from Vendor B.

4.2.4.  THREAT.IMG.FORMAT: The Target Device Misinterprets the Type of
        Payload

   Classification:  Denial of Service

   If a device misinterprets the format of the firmware image, it may
   cause a device to install a firmware image incorrectly.  An
   incorrectly installed firmware image would likely cause the device to
   stop functioning.

   Threat Escalation:  An attacker that can cause a device to
      misinterpret the received firmware image may gain elevation of
      privilege and potentially expand this to all types of threats.

   Mitigated by:  REQ.SEC.AUTH.IMG_TYPE (Section 4.3.5)

4.2.5.  THREAT.IMG.LOCATION: The Target Device Installs the Payload to
        the Wrong Location

   Classification:  Denial of Service

   If a device installs a firmware image to the wrong location on the
   device, then it is likely to break.  For example, a firmware image
   installed as an application could cause a device and/or application
   to stop functioning.

   Threat Escalation:  An attacker that can cause a device to
      misinterpret the received code may gain elevation of privilege and
      potentially expand this to all types of threats.

   Mitigated by:  REQ.SEC.AUTH.IMG_LOC (Section 4.3.6)

4.2.6.  THREAT.NET.REDIRECT: Redirection to Inauthentic Payload Hosting

   Classification:  Denial of Service

   If a device is tricked into fetching a payload for an attacker-
   controlled site, the attacker may send corrupted payloads to devices.

   Mitigated by:  REQ.SEC.AUTH.REMOTE_LOC (Section 4.3.7)

4.2.7.  THREAT.NET.ONPATH: Traffic Interception

   Classification:  Spoofing Identity, Tampering with Data

   An attacker intercepts all traffic to and from a device.  The
   attacker can monitor or modify any data sent to or received from the
   device.  This can take the form of manifests, payloads, status
   reports, and capability reports being modified or not delivered to
   the intended recipient.  It can also take the form of analysis of
   data sent to or from the device, in content, size, or frequency.

   Mitigated by:  REQ.SEC.AUTHENTIC (Section 4.3.4),
      REQ.SEC.IMG.CONFIDENTIALITY (Section 4.3.12),
      REQ.SEC.AUTH.REMOTE_LOC (Section 4.3.7),
      REQ.SEC.MFST.CONFIDENTIALITY (Section 4.3.14), REQ.SEC.REPORTING
      (Section 4.3.16)

4.2.8.  THREAT.IMG.REPLACE: Payload Replacement

   Classification:  Elevation of Privilege

   An attacker replaces newly downloaded firmware after a device
   finishes verifying a manifest.  This could cause the device to
   execute the attacker's code.  This attack likely requires physical
   access to the device.  However, it is possible that this attack is
   carried out in combination with another threat that allows remote
   execution.  This is a typical Time Of Check / Time Of Use (TOCTOU)
   attack.

   Threat Escalation:  If the attacker is able to exploit a known
      vulnerability or if the attacker can supply their own firmware,
      then this threat can be escalated to all types.

   Mitigated by:  REQ.SEC.AUTH.EXEC (Section 4.3.8)

4.2.9.  THREAT.IMG.NON_AUTH: Unauthenticated Images

   Classification:  Elevation of Privilege / all types

   If an attacker can install their firmware on a device -- for example,
   by manipulating either payload or metadata -- then they have complete
   control of the device.

   Mitigated by:  REQ.SEC.AUTHENTIC (Section 4.3.4)

4.2.10.  THREAT.UPD.WRONG_PRECURSOR: Unexpected Precursor Images

   Classification:  Denial of Service / all types

   Modifications of payloads and metadata allow an attacker to introduce
   a number of denial-of-service attacks.  Below are some examples.

   An attacker sends a valid, current manifest to a device that has an
   unexpected precursor image.  If a payload format requires a precursor
   image (for example, delta updates) and that precursor image is not
   available on the target device, it could cause the update to break.

   An attacker that can cause a device to install a payload against the
   wrong precursor image could gain elevation of privilege and
   potentially expand this to all types of threats.  However, it is
   unlikely that a valid differential update applied to an incorrect
   precursor would result in functional, but vulnerable, firmware.

   Mitigated by:  REQ.SEC.AUTH.PRECURSOR (Section 4.3.9)

4.2.11.  THREAT.UPD.UNAPPROVED: Unapproved Firmware

   Classification:  Denial of Service, Elevation of Privilege

   This threat can appear in several ways; however, it is ultimately
   about ensuring that devices retain the behavior required by their
   owner or Operator.  The owner or Operator of a device typically
   requires that the device maintain certain features, functions,
   capabilities, behaviors, or interoperability constraints (more
   generally, behavior).  If these requirements are broken, then a
   device will not fulfill its purpose.  Therefore, if any party other
   than the device's owner or the owner's contracted device operator has
   the ability to modify device behavior without approval, then this
   constitutes an elevation of privilege.

   Similarly, a network operator may require that devices behave in a
   particular way in order to maintain the integrity of the network.  If
   device behavior on a network can be modified without the approval of
   the network operator, then this constitutes an elevation of privilege
   with respect to the network.

   For example, if the owner of a device has purchased that device
   because of Features A, B, and C, and a firmware update that removes
   Feature A is issued by the manufacturer, then the device may not
   fulfill the owner's requirements any more.  In certain circumstances,
   this can cause significantly greater threats.  Suppose that Feature A
   is used to implement a safety-critical system, whether the
   manufacturer intended this behavior or not.  When unapproved firmware
   is installed, the system may become unsafe.

   In a second example, the owner or Operator of a system of two or more
   interoperating devices needs to approve firmware for their system in
   order to ensure interoperability with other devices in the system.
   If the firmware is not qualified, the system as a whole may not work.
   Therefore, if a device installs firmware without the approval of the
   device owner or Operator, this is a threat to devices or the system
   as a whole.

   Similarly, the Operator of a network may need to approve firmware for
   devices attached to the network in order to ensure favorable
   operating conditions within the network.  If the firmware is not
   qualified, it may degrade the performance of the network.  Therefore,
   if a device installs firmware without the approval of the network
   operator, this is a threat to the network itself.

   Threat Escalation:  If the network operator expects configuration
      that is present in devices deployed in Network A, but not in
      devices deployed in Network B, then the device may experience
      degraded security, leading to threats of all types.

   Mitigated by:  REQ.SEC.RIGHTS (Section 4.3.11),
      REQ.SEC.ACCESS_CONTROL (Section 4.3.13)

4.2.11.1.  Example 1: Multiple Network Operators with a Single Device
           Operator

   In this example, assume that device operators expect the rights to
   create firmware but that network operators expect the rights to
   qualify firmware as "fit for purpose" on their networks.
   Additionally, assume that device operators manage devices that can be
   deployed on any network, including Network A and Network B in our
   example.

   An attacker may obtain a manifest for a device on Network A.  Then,
   this attacker sends that manifest to a device on Network B.  Because
   Network A and Network B are under the control of different Operators,
   and the firmware for a device on Network A has not been qualified to
   be deployed on Network B, the target device on Network B is now in
   violation of Operator B's policy and may be disabled by this
   unqualified, but signed, firmware.

   This is a denial of service because it can render devices inoperable.
   This is an elevation of privilege because it allows the attacker to
   make installation decisions that should be made by the Operator.

4.2.11.2.  Example 2: Single Network Operator with Multiple Device
           Operators

   Multiple devices that interoperate are used on the same network and
   communicate with each other.  Some devices are manufactured and
   managed by Device Operator A and other devices by Device Operator B.
   New firmware is released by Device Operator A that breaks
   compatibility with devices from Device Operator B.  An attacker sends
   the new firmware to the devices managed by Device Operator A without
   the approval of the network operator.  This breaks the behavior of
   the larger system, causing denial of service and, possibly, other
   threats.  Where the network is a distributed Supervisory Control and
   Data Acquisition (SCADA) system, this could cause misbehavior of the
   process that is under control.

4.2.12.  THREAT.IMG.DISCLOSURE: Reverse Engineering of Firmware Image
         for Vulnerability Analysis

   Classification:  all types

   An attacker wants to mount an attack on an IoT device.  To prepare
   the attack, the provided firmware image is reverse engineered and
   analyzed for vulnerabilities.

   Mitigated by:  REQ.SEC.IMG.CONFIDENTIALITY (Section 4.3.12)

4.2.13.  THREAT.MFST.OVERRIDE: Overriding Critical Manifest Elements

   Classification:  Elevation of Privilege

   An authorized actor, but not the author, uses an override mechanism
   (USER_STORY.OVERRIDE (Section 4.4.3)) to change an information
   element in a manifest signed by the author.  For example, if the
   authorized actor overrides the digest and URI of the payload, the
   actor can replace the entire payload with a payload of their choice.

   Threat Escalation:  By overriding elements such as payload
      installation instructions or a firmware digest, this threat can be
      escalated to all types.

   Mitigated by:  REQ.SEC.ACCESS_CONTROL (Section 4.3.13)

4.2.14.  THREAT.MFST.EXPOSURE: Confidential Manifest Element Exposure

   Classification:  Information Disclosure

   A third party may be able to extract sensitive information from the
   manifest.

   Mitigated by:  REQ.SEC.MFST.CONFIDENTIALITY (Section 4.3.14)

4.2.15.  THREAT.IMG.EXTRA: Extra Data after Image

   Classification:  all types

   If a third party modifies the image so that it contains extra code
   after a valid, authentic image, that third party can then use their
   own code in order to make better use of an existing vulnerability.

   Mitigated by:  REQ.SEC.IMG.COMPLETE_DIGEST (Section 4.3.15)

4.2.16.  THREAT.KEY.EXPOSURE: Exposure of Signing Keys

   Classification:  all types

   If a third party obtains a key or even indirect access to a key --
   for example, in a hardware security module (HSM) -- then they can
   perform the same actions as the legitimate owner of the key.  If the
   key is trusted for firmware updates, then the third party can perform
   firmware updates as though they were the legitimate owner of the key.

   For example, if manifest signing is performed on a server connected
   to the internet, an attacker may compromise the server and then be
   able to sign manifests, even if the keys for manifest signing are
   held in an HSM that is accessed by the server.

   Mitigated by:  REQ.SEC.KEY.PROTECTION (Section 4.3.17),
      REQ.SEC.KEY.ROTATION (Section 4.3.18)

4.2.17.  THREAT.MFST.MODIFICATION: Modification of Manifest or Payload
         prior to Signing

   Classification:  all types

   If an attacker can alter a manifest or payload before it is signed,
   they can perform all the same actions as the manifest author.  This
   allows the attacker to deploy firmware updates to any devices that
   trust the manifest author.  If an attacker can modify the code of a
   payload before the corresponding manifest is created, they can insert
   their own code.  If an attacker can modify the manifest before it is
   signed, they can redirect the manifest to their own payload.

   For example, the attacker deploys malware to the developer's computer
   or signing service that watches manifest creation activities and
   inserts code into any binary that is referenced by a manifest.

   For example, the attacker deploys malware to the developer's computer
   or signing service that replaces the referenced binary (digest) and
   URI with the attacker's binary (digest) and URI.

   Mitigated by:  REQ.SEC.MFST.CHECK (Section 4.3.19),
      REQ.SEC.MFST.TRUSTED (Section 4.3.20)

4.2.18.  THREAT.MFST.TOCTOU: Modification of Manifest between
         Authentication and Use

   Classification:  all types

   If an attacker can modify a manifest after it is authenticated (time
   of check) but before it is used (time of use), then the attacker can
   place any content whatsoever in the manifest.

   Mitigated by:  REQ.SEC.MFST.CONST (Section 4.3.21)

4.3.  Security Requirements

   The security requirements here are a set of policies that mitigate
   the threats described in Section 4.1.

4.3.1.  REQ.SEC.SEQUENCE: Monotonic Sequence Numbers

   Only an actor with firmware installation authority is permitted to
   decide when device firmware can be installed.  To enforce this rule,
   manifests MUST contain monotonically increasing sequence numbers.
   Manifests may use UTC epoch timestamps to coordinate monotonically
   increasing sequence numbers across many actors in many locations.  If
   UTC epoch timestamps are used, they must not be treated as times;
   they must be treated only as sequence numbers.  Devices must reject
   manifests with sequence numbers smaller than any onboard sequence
   number, i.e., there is no sequence number rollover.

      |  Note: This is not a firmware version field.  It is a manifest
      |  sequence number.  A firmware version may be rolled back by
      |  creating a new manifest for the old firmware version with a
      |  later sequence number.

   Mitigates:  THREAT.IMG.EXPIRED (Section 4.2.1)

   Implemented by:  Monotonic Sequence Number (Section 3.2)

4.3.2.  REQ.SEC.COMPATIBLE: Vendor, Device-Type Identifiers

   Devices MUST only apply firmware that is intended for them.  Devices
   must know that a given update applies to their vendor, model,
   hardware revision, and software revision.  Human-readable identifiers
   are often prone to error in this regard, so unique identifiers should
   be used instead.

   Mitigates:  THREAT.IMG.INCOMPATIBLE (Section 4.2.3)

   Implemented by:  Vendor ID Condition (Section 3.3), Class ID
      Condition (Section 3.4)

4.3.3.  REQ.SEC.EXP: Expiration Time

   A firmware manifest MAY expire after a given time, and devices may
   have a secure clock (local or remote).  If a secure clock is provided
   and the firmware manifest has an expiration timestamp, the device
   must reject the manifest if the current time is later than the
   expiration time.

   Special consideration is required for end-of-life in cases where a
   device will not be updated again -- for example, if a business stops
   issuing updates for a device.  The last valid firmware should not
   have an expiration time.

   If a device has a flawed time source (either local or remote), an old
   update can be deployed as new.

   Mitigates:  THREAT.IMG.EXPIRED.OFFLINE (Section 4.2.2)

   Implemented by:  Expiration Time (Section 3.7)

4.3.4.  REQ.SEC.AUTHENTIC: Cryptographic Authenticity

   The authenticity of an update MUST be demonstrable.  Typically, this
   means that updates must be digitally signed.  Because the manifest
   contains information about how to install the update, the manifest's
   authenticity must also be demonstrable.  To reduce the overhead
   required for validation, the manifest contains the cryptographic
   digest of the firmware image, rather than a second digital signature.
   The authenticity of the manifest can be verified with a digital
   signature or Message Authentication Code.  The authenticity of the
   firmware image is tied to the manifest by the use of a cryptographic
   digest of the firmware image.

   Mitigates:  THREAT.IMG.NON_AUTH (Section 4.2.9), THREAT.NET.ONPATH
      (Section 4.2.7)

   Implemented by:  Signature (Section 3.15), Payload Digests
      (Section 3.13)

4.3.5.  REQ.SEC.AUTH.IMG_TYPE: Authenticated Payload Type

   The type of payload MUST be authenticated.  For example, the target
   must know whether the payload is XIP firmware, a loadable module, or
   configuration data.

   Mitigates:  THREAT.IMG.FORMAT (Section 4.2.4)

   Implemented by:  Payload Format (Section 3.8), Signature
      (Section 3.15)

4.3.6.  REQ.SEC.AUTH.IMG_LOC: Authenticated Storage Location

   The location on the target where the payload is to be stored MUST be
   authenticated.

   Mitigates:  THREAT.IMG.LOCATION (Section 4.2.5)

   Implemented by:  Storage Location (Section 3.10)

4.3.7.  REQ.SEC.AUTH.REMOTE_LOC: Authenticated Remote Payload

   The location where a target should find a payload MUST be
   authenticated.  Remote resources need to receive an equal amount of
   cryptographic protection as the manifest itself, when dereferencing
   URIs.  The security considerations of Uniform Resource Identifiers
   (URIs) are applicable [RFC3986].

   Mitigates:  THREAT.NET.REDIRECT (Section 4.2.6), THREAT.NET.ONPATH
      (Section 4.2.7)

   Implemented by:  Payload Indicator (Section 3.12)

4.3.8.  REQ.SEC.AUTH.EXEC: Secure Execution

   The target SHOULD verify firmware at the time of boot.  This requires
   authenticated payload size and firmware digest.

   Mitigates:  THREAT.IMG.REPLACE (Section 4.2.8)

   Implemented by:  Payload Digests (Section 3.13), Size (Section 3.14)

4.3.9.  REQ.SEC.AUTH.PRECURSOR: Authenticated Precursor Images

   If an update uses a differential compression method, it MUST specify
   the digest of the precursor image, and that digest MUST be
   authenticated.

   Mitigates:  THREAT.UPD.WRONG_PRECURSOR (Section 4.2.10)

   Implemented by:  Precursor Image Digest (Section 3.5)

4.3.10.  REQ.SEC.AUTH.COMPATIBILITY: Authenticated Vendor and Class IDs

   The identifiers that specify firmware compatibility MUST be
   authenticated to ensure that only compatible firmware is installed on
   a target device.

   Mitigates:  THREAT.IMG.INCOMPATIBLE (Section 4.2.3)

   Implemented by:  Vendor ID Condition (Section 3.3), Class ID
      Condition (Section 3.4)

4.3.11.  REQ.SEC.RIGHTS: Rights Require Authenticity

   If a device grants different rights to different actors, exercising
   those rights MUST be accompanied by proof of those rights, in the
   form of proof of authenticity.  Authenticity mechanisms, such as
   those required in REQ.SEC.AUTHENTIC (Section 4.3.4), can be used to
   prove authenticity.

   For example, if a device has a policy that requires that firmware
   have both an Authorship right and a Qualification right and if that
   device grants Authorship and Qualification rights to different
   parties, such as a device operator and a network operator,
   respectively, then the firmware cannot be installed without proof of
   rights from both the device operator and the network operator.

   Mitigates:  THREAT.UPD.UNAPPROVED (Section 4.2.11)

   Implemented by:  Signature (Section 3.15)

4.3.12.  REQ.SEC.IMG.CONFIDENTIALITY: Payload Encryption

   The manifest information model MUST enable encrypted payloads.
   Encryption helps to prevent third parties, including attackers, from
   reading the content of the firmware image.  This can protect against
   confidential information disclosures and discovery of vulnerabilities
   through reverse engineering.  Therefore, the manifest must convey the
   information required to allow an intended recipient to decrypt an
   encrypted payload.

   Mitigates:  THREAT.IMG.DISCLOSURE (Section 4.2.12), THREAT.NET.ONPATH
      (Section 4.2.7)

   Implemented by:  Encryption Wrapper (Section 3.20)

4.3.13.  REQ.SEC.ACCESS_CONTROL: Access Control

   If a device grants different rights to different actors, then an
   exercise of those rights MUST be validated against a list of rights
   for the actor.  This typically takes the form of an Access Control
   List (ACL).  ACLs are applied to two scenarios:

   1.  An ACL decides which elements of the manifest may be overridden
       and by which actors.

   2.  An ACL decides which component identifier / storage identifier
       pairs can be written by which actors.

   Mitigates:  THREAT.MFST.OVERRIDE (Section 4.2.13),
      THREAT.UPD.UNAPPROVED (Section 4.2.11)

   Implemented by:  Client-side code, not specified in manifest

4.3.14.  REQ.SEC.MFST.CONFIDENTIALITY: Encrypted Manifests

   A manifest format MUST allow encryption of selected parts of the
   manifest or encryption of the entire manifest to prevent sensitive
   content of the firmware metadata from being leaked.

   Mitigates:  THREAT.MFST.EXPOSURE (Section 4.2.14), THREAT.NET.ONPATH
      (Section 4.2.7)

   Implemented by:  Manifest Encryption Wrapper / Transport Security

4.3.15.  REQ.SEC.IMG.COMPLETE_DIGEST: Whole Image Digest

   The digest SHOULD cover all available space in a fixed-size storage
   location.  Variable-size storage locations MUST be restricted to
   exactly the size of deployed payload.  This prevents any data from
   being distributed without being covered by the digest.  For example,
   XIP microcontrollers typically have fixed-size storage.  These
   devices should deploy a digest that covers the deployed firmware
   image, concatenated with the default erased value of any remaining
   space.

   Mitigates:  THREAT.IMG.EXTRA (Section 4.2.15)

   Implemented by:  Payload Digests (Section 3.13)

4.3.16.  REQ.SEC.REPORTING: Secure Reporting

   Status reports from the device to any remote system MUST be performed
   over an authenticated, confidential channel in order to prevent
   modification or spoofing of the reports.

   Mitigates:  THREAT.NET.ONPATH (Section 4.2.7)

   Implemented by:  Transport Security / Manifest format triggering
      generation of reports

4.3.17.  REQ.SEC.KEY.PROTECTION: Protected Storage of Signing Keys

   Cryptographic keys for signing/authenticating manifests SHOULD be
   stored in a manner that is inaccessible to networked devices -- for
   example, in an HSM or an air-gapped computer.  This protects against
   an attacker obtaining the keys.

   Keys SHOULD be stored in a way that limits the risk of a legitimate,
   but compromised, entity (such as a server or developer computer)
   issuing signing requests.

   Mitigates:  THREAT.KEY.EXPOSURE (Section 4.2.16)

   Implemented by:  Hardware-assisted isolation technologies, which are
      outside the scope of the manifest format

4.3.18.  REQ.SEC.KEY.ROTATION: Protected Storage of Signing Keys

   Cryptographic keys for signing/authenticating manifests SHOULD be
   replaced from time to time.  Because it is difficult and risky to
   replace a trust anchor, keys used for signing updates SHOULD be
   delegates of that trust anchor.

   If key expiration is performed based on time, then a secure clock is
   needed.  If the time source used by a recipient to check for
   expiration is flawed, an old signing key can be used as current,
   which compounds THREAT.KEY.EXPOSURE (Section 4.2.16).

   Mitigates:  THREAT.KEY.EXPOSURE (Section 4.2.16)

   Implemented by:  Secure storage technology, which is a system design/
      implementation aspect outside the scope of the manifest format

4.3.19.  REQ.SEC.MFST.CHECK: Validate Manifests prior to Deployment

   Manifests SHOULD be verified prior to deployment.  This reduces
   problems that may arise with devices installing firmware images that
   damage devices unintentionally.

   Mitigates:  THREAT.MFST.MODIFICATION (Section 4.2.17)

   Implemented by:  Testing infrastructure.  While outside the scope of
      the manifest format, proper testing of low-level software is
      essential for avoiding unnecessary downtime or worse situations.

4.3.20.  REQ.SEC.MFST.TRUSTED: Construct Manifests in a Trusted
         Environment

   For high-risk deployments, such as large numbers of devices or
   devices that provide critical functions, manifests SHOULD be
   constructed in an environment that is protected from interference,
   such as an air-gapped computer.  Note that a networked computer
   connected to an HSM does not fulfill this requirement (see
   THREAT.MFST.MODIFICATION (Section 4.2.17)).

   Mitigates:  THREAT.MFST.MODIFICATION (Section 4.2.17)

   Implemented by:  Physical and network security for protecting the
      environment where firmware updates are prepared to avoid
      unauthorized access to this infrastructure

4.3.21.  REQ.SEC.MFST.CONST: Manifest Kept Immutable between Check and
         Use

   Both the manifest and any data extracted from it MUST be held
   immutable between its authenticity verification (time of check) and
   its use (time of use).  To make this guarantee, the manifest MUST fit
   within internal memory or secure memory, such as encrypted memory.
   The recipient SHOULD defend the manifest from tampering by code or
   hardware resident in the recipient -- for example, other processes or
   debuggers.

   If an application requires that the manifest be verified before
   storing it, then this means the manifest MUST fit in RAM.

   Mitigates:  THREAT.MFST.TOCTOU (Section 4.2.18)

   Implemented by:  Proper system design with sufficient resources and
      implementation avoiding TOCTOU attacks

4.4.  User Stories

   User stories provide expected use cases.  These are used to feed into
   usability requirements.

4.4.1.  USER_STORY.INSTALL.INSTRUCTIONS: Installation Instructions

   As a device operator, I want to provide my devices with additional
   installation instructions so that I can keep process details out of
   my payload data.

   Some installation instructions might be as follows:

   *  Use a table of hashes to ensure that each block of the payload is
      validated before writing.

   *  Do not report progress.

   *  Pre-cache the update, but do not install.

   *  Install the pre-cached update matching this manifest.

   *  Install this update immediately, overriding any long-running
      tasks.

   Satisfied by:  REQ.USE.MFST.PRE_CHECK (Section 4.5.1)

4.4.2.  USER_STORY.MFST.FAIL_EARLY: Fail Early

   As a designer of a resource-constrained IoT device, I want bad
   updates to fail as early as possible to preserve battery life and
   limit consumed bandwidth.

   Satisfied by:  REQ.USE.MFST.PRE_CHECK (Section 4.5.1)

4.4.3.  USER_STORY.OVERRIDE: Override Non-critical Manifest Elements

   As a device operator, I would like to be able to override the non-
   critical information in the manifest so that I can control my devices
   more precisely.  The authority to override this information is
   provided via the installation of a limited trust anchor by another
   authority.

   Some examples of potentially overridable information:

   URIs (Section 3.12):  This allows the device operator to direct
      devices to their own infrastructure in order to reduce network
      load.

   Conditions:  This allows the device operator to impose additional
      constraints on the installation of the manifest.

   Directives (Section 3.16):  This allows the device operator to add
      more instructions, such as time of installation.

   Processing Steps (Section 3.9):  If an intermediary performs an
      action on behalf of a device, it may need to override the
      processing steps.  It is still possible for a device to verify the
      final content and the result of any processing step that specifies
      a digest.  Some processing steps should be non-overridable.

   Satisfied by:  REQ.USE.MFST.COMPONENT (Section 4.5.4)

4.4.4.  USER_STORY.COMPONENT: Component Update

   As a device operator, I want to divide my firmware into components,
   so that I can reduce the size of updates, make different parties
   responsible for different components, and divide my firmware into
   frequently updated and infrequently updated components.

   Satisfied by:  REQ.USE.MFST.COMPONENT (Section 4.5.4)

4.4.5.  USER_STORY.MULTI_AUTH: Multiple Authorizations

   As a device operator, I want to ensure the quality of a firmware
   update before installing it, so that I can ensure interoperability of
   all devices in my product family.  I want to restrict the ability to
   make changes to my devices to require my express approval.

   Satisfied by:  REQ.USE.MFST.MULTI_AUTH (Section 4.5.5),
      REQ.SEC.ACCESS_CONTROL (Section 4.3.13)

4.4.6.  USER_STORY.IMG.FORMAT: Multiple Payload Formats

   As a device operator, I want to be able to send multiple payload
   formats to suit the needs of my update, so that I can optimize the
   bandwidth used by my devices.

   Satisfied by:  REQ.USE.IMG.FORMAT (Section 4.5.6)

4.4.7.  USER_STORY.IMG.CONFIDENTIALITY: Prevent Confidential Information
        Disclosures

   As a firmware author, I want to prevent confidential information in
   the manifest from being disclosed when distributing manifests and
   firmware images.  Confidential information may include information
   about the device these updates are being applied to as well as
   information in the firmware image itself.

   Satisfied by:  REQ.SEC.IMG.CONFIDENTIALITY (Section 4.3.12)

4.4.8.  USER_STORY.IMG.UNKNOWN_FORMAT: Prevent Devices from Unpacking
        Unknown Formats

   As a device operator, I want devices to determine whether they can
   process a payload prior to downloading it.

   In some cases, it may be desirable for a third party to perform some
   processing on behalf of a target.  For this to occur, the third party
   MUST indicate what processing occurred and how to verify it against
   the Trust Provisioning Authority's intent.

   This amounts to overriding Processing Steps (Section 3.9) and Payload
   Indicator (Section 3.12).

   Satisfied by:  REQ.USE.IMG.FORMAT (Section 4.5.6), REQ.USE.IMG.NESTED
      (Section 4.5.7), REQ.USE.MFST.OVERRIDE_REMOTE (Section 4.5.3)

4.4.9.  USER_STORY.IMG.CURRENT_VERSION: Specify Version Numbers of
        Target Firmware

   As a device operator, I want to be able to target devices for updates
   based on their current firmware version, so that I can control which
   versions are replaced with a single manifest.

   Satisfied by:  REQ.USE.IMG.VERSIONS (Section 4.5.8)

4.4.10.  USER_STORY.IMG.SELECT: Enable Devices to Choose between Images

   As a developer, I want to be able to sign two or more versions of my
   firmware in a single manifest so that I can use a very simple
   bootloader that chooses between two or more images that are executed
   in place.

   Satisfied by:  REQ.USE.IMG.SELECT (Section 4.5.9)

4.4.11.  USER_STORY.EXEC.MFST: Secure Execution Using Manifests

   As a signer for both secure execution/boot and firmware deployment, I
   would like to use the same signed document for both tasks so that my
   data size is smaller, I can share common code, and I can reduce
   signature verifications.

   Satisfied by:  REQ.USE.EXEC (Section 4.5.10)

4.4.12.  USER_STORY.EXEC.DECOMPRESS: Decompress on Load

   As a developer of firmware for a run-from-RAM device, I would like to
   use compressed images and to indicate to the bootloader that I am
   using a compressed image in the manifest so that it can be used with
   secure execution/boot.

   Satisfied by:  REQ.USE.LOAD (Section 4.5.11)

4.4.13.  USER_STORY.MFST.IMG: Payload in Manifest

   As an Operator of devices on a constrained network, I would like the
   manifest to be able to include a small payload in the same packet so
   that I can reduce network traffic.

   Small payloads may include, for example, wrapped content encryption
   keys, configuration information, public keys, authorization tokens,
   or X.509 certificates.

   Satisfied by:  REQ.USE.PAYLOAD (Section 4.5.12)

4.4.14.  USER_STORY.MFST.PARSE: Simple Parsing

   As a developer for constrained devices, I want a low-complexity
   library for processing updates so that I can fit more application
   code on my device.

   Satisfied by:  REQ.USE.PARSE (Section 4.5.13)

4.4.15.  USER_STORY.MFST.DELEGATION: Delegated Authority in Manifest

   As a device operator that rotates delegated authority more often than
   delivering firmware updates, I would like to delegate a new authority
   when I deliver a firmware update so that I can accomplish both tasks
   in a single transmission.

   Satisfied by:  REQ.USE.DELEGATION (Section 4.5.14)

4.4.16.  USER_STORY.MFST.PRE_CHECK: Update Evaluation

   As an Operator of a constrained network, I would like devices on my
   network to be able to evaluate the suitability of an update prior to
   initiating any large download so that I can prevent unnecessary
   consumption of bandwidth.

   Satisfied by:  REQ.USE.MFST.PRE_CHECK (Section 4.5.1)

4.4.17.  USER_STORY.MFST.ADMINISTRATION: Administration of Manifests

   As a device operator, I want to understand what an update will do and
   to which devices it applies so that I can make informed choices about
   which updates to apply, when to apply them, and which devices should
   be updated.

   Satisfied by:  REQ.USE.MFST.TEXT (Section 4.5.2)

4.5.  Usability Requirements

   The following usability requirements satisfy the user stories listed
   above.

4.5.1.  REQ.USE.MFST.PRE_CHECK: Pre-installation Checks

   A manifest format MUST be able to carry all information required to
   process an update.

   For example, information about which precursor image is required for
   a differential update must be placed in the manifest.

   Satisfies:  USER_STORY.MFST.PRE_CHECK (Section 4.4.16),
      USER_STORY.INSTALL.INSTRUCTIONS (Section 4.4.1)

   Implemented by:  Additional Installation Instructions (Section 3.16)

4.5.2.  REQ.USE.MFST.TEXT: Descriptive Manifest Information

   It MUST be possible for a device operator to determine what a
   manifest will do and which devices will accept it prior to
   distribution.

   Satisfies:  USER_STORY.MFST.ADMINISTRATION (Section 4.4.17)

   Implemented by:  Manifest Text Information (Section 3.17)

4.5.3.  REQ.USE.MFST.OVERRIDE_REMOTE: Override Remote Resource Location

   A manifest format MUST be able to redirect payload fetches.  This
   applies where two manifests are used in conjunction.  For example, a
   device operator creates a manifest specifying a payload and signs it,
   and provides a URI for that payload.  A network operator creates a
   second manifest, with a dependency on the first.  They use this
   second manifest to override the URIs provided by the device operator,
   directing them into their own infrastructure instead.  Some devices
   may provide this capability, while others may only look at canonical
   sources of firmware.  For this to be possible, the device must fetch
   the payload, whereas a device that accepts payload pushes will ignore
   this feature.

   Satisfies:  USER_STORY.OVERRIDE (Section 4.4.3)

   Implemented by:  Aliases (Section 3.18)

4.5.4.  REQ.USE.MFST.COMPONENT: Component Updates

   A manifest format MUST be able to express the requirement to install
   one or more payloads from one or more authorities so that a multi-
   payload update can be described.  This allows multiple parties with
   different permissions to collaborate in creating a single update for
   the IoT device, across multiple components.

   This requirement implies that it must be possible to construct a tree
   of manifests on a multi-image target.

   In order to enable devices with a heterogeneous storage architecture,
   the manifest must enable specification of both a storage system and
   the storage location within that storage system.

   Satisfies:  USER_STORY.OVERRIDE (Section 4.4.3), USER_STORY.COMPONENT
      (Section 4.4.4)

   Implemented by:  Dependencies, StorageIdentifier, ComponentIdentifier

4.5.4.1.  Example 1: Multiple Microcontrollers

   An IoT device with multiple microcontrollers in the same physical
   device will likely require multiple payloads with different component
   identifiers.

4.5.4.2.  Example 2: Code and Configuration

   A firmware image can be divided into two payloads: code and
   configuration.  These payloads may require authorizations from
   different actors in order to install (see REQ.SEC.RIGHTS
   (Section 4.3.11) and REQ.SEC.ACCESS_CONTROL (Section 4.3.13)).  This
   structure means that multiple manifests may be required, with a
   dependency structure between them.

4.5.4.3.  Example 3: Multiple Software Modules

   A firmware image can be divided into multiple functional blocks for
   separate testing and distribution.  This means that code would need
   to be distributed in multiple payloads.  For example, this might be
   desirable in order to ensure that common code between devices is
   identical in order to reduce distribution bandwidth.

4.5.5.  REQ.USE.MFST.MULTI_AUTH: Multiple Authentications

   A manifest format MUST be able to carry multiple signatures so that
   authorizations from multiple parties with different permissions can
   be required in order to authorize installation of a manifest.

   Satisfies:  USER_STORY.MULTI_AUTH (Section 4.4.5)

   Implemented by:  Signature (Section 3.15)

4.5.6.  REQ.USE.IMG.FORMAT: Format Usability

   The manifest format MUST accommodate any payload format that an
   Operator wishes to use.  This enables the recipient to detect which
   format the Operator has chosen.  Some examples of payload format are
   as follows:

   *  Binary

   *  Executable and Linkable Format (ELF)

   *  Differential

   *  Compressed

   *  Packed configuration

   *  Intel HEX

   *  Motorola S-Record

   Satisfies:  USER_STORY.IMG.FORMAT (Section 4.4.6)
      USER_STORY.IMG.UNKNOWN_FORMAT (Section 4.4.8)

   Implemented by:  Payload Format (Section 3.8)

4.5.7.  REQ.USE.IMG.NESTED: Nested Formats

   The manifest format MUST accommodate nested formats, announcing to
   the target device all the nesting steps and any parameters used by
   those steps.

   Satisfies:  USER_STORY.IMG.CONFIDENTIALITY (Section 4.4.7)

   Implemented by:  Processing Steps (Section 3.9)

4.5.8.  REQ.USE.IMG.VERSIONS: Target Version Matching

   The manifest format MUST provide a method to specify multiple version
   numbers of firmware to which the manifest applies, either with a list
   or with range matching.

   Satisfies:  USER_STORY.IMG.CURRENT_VERSION (Section 4.4.9)

   Implemented by:  Required Image Version List (Section 3.6)

4.5.9.  REQ.USE.IMG.SELECT: Select Image by Destination

   The manifest format MUST provide a mechanism to list multiple
   equivalent payloads by execute-in-place (XIP) installation address,
   including the payload digest and, optionally, payload URIs.

   Satisfies:  USER_STORY.IMG.SELECT (Section 4.4.10)

   Implemented by:  XIP Address (Section 3.21)

4.5.10.  REQ.USE.EXEC: Executable Manifest

   The manifest format MUST allow the description of an executable
   system with a manifest on both XIP microcontrollers and complex
   operating systems.  In addition, the manifest format MUST be able to
   express metadata, such as a kernel command line, used by any loader
   or bootloader.

   Satisfies:  USER_STORY.EXEC.MFST (Section 4.4.11)

   Implemented by:  Runtime Metadata (Section 3.23)

4.5.11.  REQ.USE.LOAD: Load-Time Information

   The manifest format MUST enable carrying additional metadata for
   load-time processing of a payload, such as cryptographic information,
   load address, and compression algorithm.  Note that load comes before
   execution/boot.

   Satisfies:  USER_STORY.EXEC.DECOMPRESS (Section 4.4.12)

   Implemented by:  Load-Time Metadata (Section 3.22)

4.5.12.  REQ.USE.PAYLOAD: Payload in Manifest Envelope

   The manifest format MUST allow placing a payload in the same
   structure as the manifest.  This may place the payload in the same
   packet as the manifest.

   Integrated payloads may include, for example, binaries as well as
   configuration information, and keying material.

   When an integrated payload is provided, this increases the size of
   the manifest.  Manifest size can cause several processing and storage
   concerns that require careful consideration.  The payload can prevent
   the whole manifest from being contained in a single network packet,
   which can cause fragmentation and the loss of portions of the
   manifest in lossy networks.  This causes the need for reassembly and
   retransmission logic.  The manifest MUST be held immutable between
   verification and processing (see REQ.SEC.MFST.CONST
   (Section 4.3.21)), so a larger manifest will consume more memory with
   immutability guarantees -- for example, internal RAM or NVRAM, or
   external secure memory.  If the manifest exceeds the available
   immutable memory, then it MUST be processed modularly, evaluating
   each of the following: delegation chains; the security container; and
   the actual manifest, which includes verifying the integrated payload.
   If the security model calls for downloading the manifest and
   validating it before storing to NVRAM in order to prevent wear to
   NVRAM and energy expenditure in NVRAM, then either increasing memory
   allocated to manifest storage or modular processing of the received
   manifest may be required.  While the manifest has been organized to
   enable this type of processing, it creates additional complexity in
   the parser.  If the manifest is stored in NVRAM prior to processing,
   the integrated payload may cause the manifest to exceed the available
   storage.  Because the manifest is received prior to validation of
   applicability, authority, or correctness, integrated payloads cause
   the recipient to expend network bandwidth and energy that may not be
   required if the manifest is discarded, and these costs vary with the
   size of the integrated payload.

   See also:  REQ.SEC.MFST.CONST (Section 4.3.21)

   Satisfies:  USER_STORY.MFST.IMG (Section 4.4.13)

   Implemented by:  Payload (Section 3.24)

4.5.13.  REQ.USE.PARSE: Simple Parsing

   The structure of the manifest MUST be simple to parse to reduce the
   attack vectors against manifest parsers.

   Satisfies:  USER_STORY.MFST.PARSE (Section 4.4.14)

   Implemented by:  N/A

4.5.14.  REQ.USE.DELEGATION: Delegation of Authority in Manifest

   A manifest format MUST enable the delivery of delegation information.
   This information delivers a new key with which the recipient can
   verify the manifest.

   Satisfies:  USER_STORY.MFST.DELEGATION (Section 4.4.15)

   Implemented by:  Delegation Chain (Section 3.25)

5.  IANA Considerations

   This document has no IANA actions.

6.  References

6.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC4122]  Leach, P., Mealling, M., and R. Salz, "A Universally
              Unique IDentifier (UUID) URN Namespace", RFC 4122,
              DOI 10.17487/RFC4122, July 2005,
              <https://www.rfc-editor.org/info/rfc4122>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [RFC8392]  Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig,
              "CBOR Web Token (CWT)", RFC 8392, DOI 10.17487/RFC8392,
              May 2018, <https://www.rfc-editor.org/info/rfc8392>.

   [RFC8747]  Jones, M., Seitz, L., Selander, G., Erdtman, S., and H.
              Tschofenig, "Proof-of-Possession Key Semantics for CBOR
              Web Tokens (CWTs)", RFC 8747, DOI 10.17487/RFC8747, March
              2020, <https://www.rfc-editor.org/info/rfc8747>.

   [RFC9019]  Moran, B., Tschofenig, H., Brown, D., and M. Meriac, "A
              Firmware Update Architecture for Internet of Things",
              RFC 9019, DOI 10.17487/RFC9019, April 2021,
              <https://www.rfc-editor.org/info/rfc9019>.

6.2.  Informative References

   [RFC3444]  Pras, A. and J. Schoenwaelder, "On the Difference between
              Information Models and Data Models", RFC 3444,
              DOI 10.17487/RFC3444, January 2003,
              <https://www.rfc-editor.org/info/rfc3444>.

   [RFC3986]  Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
              Resource Identifier (URI): Generic Syntax", STD 66,
              RFC 3986, DOI 10.17487/RFC3986, January 2005,
              <https://www.rfc-editor.org/info/rfc3986>.

   [STRIDE]   Microsoft, "The STRIDE Threat Model", November 2009,
              <https://docs.microsoft.com/en-us/previous-versions/
              commerce-server/ee823878(v=cs.20)>.

Acknowledgements

   We would like to thank our working group chairs -- Dave Thaler, Russ
   Housley, and David Waltermire -- for their review comments and their
   support.

   We would like to thank the participants of the 2018 Berlin Software
   Updates for Internet of Things (SUIT) Hackathon and the June 2018
   virtual design team meetings for their discussion input.

   In particular, we would like to thank Koen Zandberg, Emmanuel
   Baccelli, Carsten Bormann, David Brown, Markus Gueller, Frank Audun
   Kvamtrø, Øyvind Rønningstad, Michael Richardson, Jan-Frederik
   Rieckers, Francisco Acosta, Anton Gerasimov, Matthias Wählisch, Max
   Gröning, Daniel Petry, Gaëtan Harter, Ralph Hamm, Steve Patrick,
   Fabio Utzig, Paul Lambert, Saïd Gharout, and Milen Stoychev.

   We would like to thank those who contributed to the development of
   this information model.  In particular, we would like to thank
   Milosch Meriac, Jean-Luc Giraud, Dan Ros, Amyas Phillips, and Gary
   Thomson.

   Finally, we would like to thank the following IESG members for their
   review feedback: Erik Kline, Murray Kucherawy, Barry Leiba, Alissa
   Cooper, Stephen Farrell, and Benjamin Kaduk.

Authors' Addresses

   Brendan Moran
   Arm Limited

   Email: Brendan.Moran@arm.com


   Hannes Tschofenig
   Arm Limited

   Email: hannes.tschofenig@gmx.net


   Henk Birkholz
   Fraunhofer SIT

   Email: henk.birkholz@sit.fraunhofer.de