summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc8412.txt
blob: 61ff09acd845b8a974d8f5492ced5d7f35c4a2b8 (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
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
Internet Engineering Task Force (IETF)                        C. Schmidt
Request for Comments: 8412                                     D. Haynes
Category: Standards Track                                      C. Coffin
ISSN: 2070-1721                                    The MITRE Corporation
                                                           D. Waltermire
                          National Institute of Standards and Technology
                                                     J. Fitzgerald-McKay
                                  United States National Security Agency
                                                               July 2018


      Software Inventory Message and Attributes (SWIMA) for PA-TNC

Abstract

   This document extends "PA-TNC: A Posture Attribute (PA) Protocol
   Compatible with Trusted Network Connect (TNC)" (RFC 5792) by
   providing specific attributes and message exchanges to allow
   endpoints to report their installed software inventory information to
   a NEA Server, as defined in "Network Endpoint Assessment (NEA):
   Overview and Requirements" (RFC 5209).

Status of This Memo

   This is an Internet Standards Track document.

   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).  Further information on
   Internet Standards is available in 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/rfc8412.
















Schmidt, et al.              Standards Track                    [Page 1]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


Copyright Notice

   Copyright (c) 2018 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 Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1. Introduction ....................................................4
      1.1. Network Endpoint Assessment (NEA) ..........................6
      1.2. Conventions Used in This Document ..........................7
      1.3. Definitions ................................................7
   2. Background ......................................................8
      2.1. Supported Use Cases ........................................8
           2.1.1. Use Software Inventory as an Access Control Factor ..8
           2.1.2. Central Stores of Up-to-Date Endpoint
                  Software Inventory Data .............................9
           2.1.3. PA-TNC Use Cases ....................................9
      2.2. Use Cases That Are Not Supported ...........................9
      2.3. SWIMA Requirements ........................................10
      2.4. Non-SWIMA Requirements ....................................11
      2.5. Assumptions ...............................................12
      2.6. Assumptions Not Made ......................................12
   3. System Requirements ............................................12
      3.1. Data Sources ..............................................13
      3.2. Data Models ...............................................14
      3.3. Basic Attribute Exchange ..................................16
      3.4. Core Software-Reporting Information .......................17
           3.4.1. Software Identifiers ...............................17
           3.4.2. Data Model Type ....................................19
           3.4.3. Record Identifiers .................................19
           3.4.4. Software Locators ..................................20
           3.4.5. Source Identifiers .................................21
           3.4.6. Using Software and Record Identifiers in
                  SWIMA Attributes ...................................22
      3.5. Targeted Requests .........................................22
      3.6. Monitoring Changes in an Endpoint's Software
           Inventory Evidence Collection .............................23




Schmidt, et al.              Standards Track                    [Page 2]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


      3.7. Reporting Change Events ...................................26
           3.7.1. Event Identifiers ..................................27
           3.7.2. Core Event-Tracking Information ....................28
           3.7.3. Updating Inventory Knowledge Based on Events .......29
           3.7.4. Using Event Records in SWIMA Attributes ............29
           3.7.5. Partial and Complete Lists of Event Records
                  in SWIMA Attributes ................................30
           3.7.6. Synchronizing Event Identifiers and Epochs .........32
      3.8. Subscriptions .............................................33
           3.8.1. Establishing Subscriptions .........................34
           3.8.2. Managing Subscriptions .............................35
           3.8.3. Terminating Subscriptions ..........................36
           3.8.4. Subscription Status ................................36
           3.8.5. Fulfilling Subscriptions ...........................37
                  3.8.5.1. Subscriptions That Report Inventories .....38
                  3.8.5.2. Subscriptions That Report Events ..........38
                  3.8.5.3. Targeted Subscriptions ....................40
                  3.8.5.4. No Subscription Consolidation .............40
                  3.8.5.5. Delayed Subscription Fulfillment ..........41
      3.9. Error Handling ............................................41
   4. Protocol .......................................................43
      4.1. Direct Response to a SWIMA Request ........................44
      4.2. Subscription-Based Response ...............................45
      4.3. Required Exchanges ........................................45
   5. Software Inventory Messages and Attributes .....................46
      5.1. PA Subtype (aka PA-TNC Component Type) ....................46
      5.2. SWIMA Attribute Overview ..................................46
      5.3. Message Diagram Syntax ....................................48
      5.4. Normalization of Text Encoding ............................49
      5.5. Request IDs ...............................................49
      5.6. SWIMA Request .............................................50
      5.7. Software Identifier Inventory .............................54
      5.8. Software Identifier Events ................................58
      5.9. Software Inventory ........................................64
      5.10. Software Events ..........................................67
      5.11. Subscription Status Request ..............................72
      5.12. Subscription Status Response .............................73
      5.13. Source Metadata Request ..................................75
      5.14. Source Metadata Response .................................76
      5.15. PA-TNC Error as Used by SWIMA ............................78
           5.15.1. SWIMA_ERROR, SWIMA_SUBSCRIPTION_DENIED_ERROR, and
                   SWIMA_SUBSCRIPTION_ID_REUSE_ERROR Information .....81
           5.15.2. SWIMA_RESPONSE_TOO_LARGE_ERROR Information ........83
           5.15.3. SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR Information ..85







Schmidt, et al.              Standards Track                    [Page 3]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   6. Supported Data Models ..........................................87
      6.1. ISO 2015 SWID Tags Using XML ..............................87
           6.1.1. Guidance on Normalizing Source Data to ISO 2015
                  SWID Tags Using XML ................................87
           6.1.2. Guidance on Creation of Software Identifiers from
                  ISO 2015 SWID Tags .................................88
      6.2. ISO 2009 SWID Tags Using XML ..............................88
           6.2.1. Guidance on Normalizing Source Data to ISO 2009
                  SWID Tags Using XML ................................88
           6.2.2. Guidance on Creation of Software Identifiers from
                  ISO 2009 SWID Tags .................................89
   7. Relationship to Other Specifications ...........................89
   8. Security Considerations ........................................90
      8.1. Evidentiary Value of Software Inventory Evidence Records ..90
      8.2. Sensitivity of Collected Records ..........................91
      8.3. Integrity of Endpoint Records .............................92
      8.4. SWIMA-PC Access Permissions ...............................92
      8.5. Sanitization of Record Fields .............................93
      8.6. PA-TNC Security Threats ...................................93
   9. Privacy Considerations .........................................93
   10. IANA Considerations ...........................................94
      10.1. Guidance for the Designated Experts ......................94
      10.2. PA Subtypes ..............................................95
      10.3. PA-TNC Attribute Types ...................................96
      10.4. PA-TNC Error Codes .......................................97
      10.5. Software Data Model Types ................................97
   11. References ....................................................98
      11.1. Normative References .....................................98
      11.2. Informative References ...................................99
   Authors' Addresses ...............................................101

1.  Introduction

   Knowing the list of software installed on endpoints is useful to
   understand and maintain the security state of a network.  For
   example, if an enterprise policy requires the presence of certain
   software and prohibits the presence of other software, reported
   software installation information can be used to indicate compliance
   and non-compliance with these requirements.  Endpoint software
   installation inventory lists (hereinafter "software inventories") can
   further be used to determine an endpoint's exposure to attack based
   on comparison of vulnerability or threat alerts against identified
   software's patch-level data.  These are some of the highly useful
   management use cases supported by software inventory data.







Schmidt, et al.              Standards Track                    [Page 4]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   Software Inventory Message and Attributes (SWIMA) for PA-TNC (see
   "PA-TNC: A Posture Attribute (PA) Protocol Compatible with Trusted
   Network Connect (TNC)" [RFC5792]) provides a standardized method for
   exchanging software inventory data that includes a unique Software
   Identifier associated with a specific version of a software product.
   SWIMA can also convey metadata about software products beyond this
   identifier.  SWIMA enables software identification, installation, and
   characterization information to be transported to a central server
   from any endpoint that supports this specification.  Such information
   can come from multiple sources, including tag files (such as ISO
   Software Identification (SWID) tags [SWID15]), reports from
   third-party inventory tools, output from package managers, and other
   sources.  SWIMA does not standardize how software is detected,
   instead relying on a set of "data sources" to provide information
   about installed software.  SWIMA provides a flexible transport
   capable of conveying this information, regardless of how it is
   expressed.

   This specification is designed to only report software that is
   installed on a target endpoint.  In particular, it does not monitor
   or report information about what software is running on the endpoint.
   Likewise, it is not intended to report individual files, libraries,
   installation packages, or similar artifacts.  While all of this
   information has its uses, this information requires different
   metadata and monitoring methods.  As a result, this specification
   focuses solely on software inventory information, leaving the
   reporting of other classes of endpoint information to other
   specifications.

   Note that while this specification focuses on "software inventory",
   the mechanisms it describes could also be used to convey information
   about firmware and operating systems associated with an endpoint.
   The focus on software throughout this document should not be read as
   excluding the use of SWIMA for these other purposes.

   This specification defines a new set of PA-TNC attributes; these
   attributes are used to communicate requests for software inventory
   information and software installation change events.  The exchange of
   these messages allows software inventory information to be sent to a
   Network Endpoint Assessment (NEA) Server, which can make this
   information available to other applications.

   Part of the motivation for the development of SWIMA was to support
   the IETF's Security Automation and Continuous Monitoring (SACM)
   architecture.  More details about SWIMA's role in SACM appear in
   Section 7.  However, SWIMA has no dependencies on any part of SACM
   and is usable wherever the NEA architecture is employed.




Schmidt, et al.              Standards Track                    [Page 5]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


1.1.  Network Endpoint Assessment (NEA)

   SWIMA defines extensions to the PA-TNC specification [RFC5792]; these
   extensions are part of the NEA architecture.  The NEA specifications
   define an open solution architecture that enables network operators
   to collect and utilize information about endpoint configuration and
   state.  This information can be used to enforce policies and monitor
   endpoint health, among many other activities.  Information about the
   software present on an endpoint is an important consideration for
   such activities.  The new PA-TNC attributes defined in this document
   are used to communicate software inventory evidence, collected from a
   range of possible sources, from the Posture Collector on the endpoint
   to the Posture Validator on a NEA Server using the PA-TNC interface,
   as shown in Figure 1 below.

       +-------------+                          +--------------+
       |  Posture    |   <--------PA-------->   |   Posture    |
       |  Collectors |                          |   Validators |
       |  (1 .. N)   |                          |   (1 .. N)   |
       +-------------+                          +--------------+
             |                                         |
             |                                         |
             |                                         |
       +-------------+                          +--------------+
       |   Posture   |                          |   Posture    |
       |   Broker    |   <--------PB-------->   |   Broker     |
       |   Client    |                          |   Server     |
       +-------------+                          +--------------+
             |                                         |
             |                                         |
       +-------------+                          +--------------+
       |   Posture   |                          |   Posture    |
       |   Transport |   <--------PT-------->   |   Transport  |
       |   Client    |                          |   Server     |
       |   (1 .. N)  |                          |   (1 .. N)   |
       +-------------+                          +--------------+
          NEA CLIENT                               NEA SERVER

                       Figure 1: NEA Reference Model

   To better understand this specification, the reader should review the
   NEA reference architecture as described in "Network Endpoint
   Assessment (NEA): Overview and Requirements" [RFC5209].  The reader
   should also review the PA-TNC interfaces as defined in RFC 5792
   [RFC5792].






Schmidt, et al.              Standards Track                    [Page 6]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   This document is based on standards published by the Trusted
   Computing Group's Trusted Network Communications (TNC) workgroup (see
   <https://trustedcomputinggroup.org/>).  The TNC and NEA architectures
   are interoperable, and many components are equivalent.

1.2.  Conventions Used in This Document

   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.

1.3.  Definitions

   This section defines terms that have special meaning within this
   document.

   o  SWIMA-PC - A NEA Posture Collector (PC) that interprets SWIMA
      attributes sent by SWIMA-PVs and that conforms to this
      specification.  Note that such a Posture Collector might also
      support other PA-TNC exchanges beyond those defined herein.

   o  SWIMA-PV - A NEA Posture Validator (PV) that interprets SWIMA
      attributes sent by SWIMA-PCs and that conforms to this
      specification.  Note that such a Posture Validator might also
      support other PA-TNC exchanges beyond those defined herein.

   o  SWIMA Attribute - A PA-TNC attribute (as defined in RFC 5792
      [RFC5792]) whose structure and behavior is defined in this
      specification.

   o  Endpoint's Software Inventory Evidence Collection - The set of
      information regarding the set of software installed on an
      endpoint.  An endpoint's Software Inventory Evidence Collection
      might include information created by or derived from multiple
      sources, including but not limited to SWID tag files deposited on
      the filesystem during software installation, information generated
      by software discovery tools, and information dynamically generated
      by a software or package management system on an endpoint.

   o  Software Inventory Evidence Record - Part of the endpoint's
      Software Inventory Evidence Collection (which is composed of
      "records").  Each record corresponds to one installed instance of
      a particular software product as reported by some data source.  It
      is possible for a single installed instance to have multiple





Schmidt, et al.              Standards Track                    [Page 7]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


      Software Inventory Evidence Records in an endpoint's Software
      Inventory Evidence Collection -- this can happen if multiple
      sources all report the same software installation instance.

   o  Software Identifier - A string associated with a specific version
      of a specific software product.  These identifiers are derived
      from the records used to describe software products.  SWIMA does
      not limit the formats of these records, nor does it enforce that
      all data sources populate records using the same format.  As such,
      while each Software Identifier uniquely identifies a specific
      software product, the same software product might be associated
      with multiple Software Identifiers reflecting differences between
      different data sources and supported record formats.

2.  Background

2.1.  Supported Use Cases

   This section describes the use cases supported by this specification.
   The primary use of exchanging software inventory information over the
   PA-TNC interface is to enable a challenger (e.g., a NEA Server) to
   obtain inventory evidence about some system in a way that conforms to
   NEA procedures.  Collected software information can support a range
   of security activities, including determining whether an endpoint is
   permitted to connect to the enterprise, determining which endpoints
   contain software that requires patching, and similar activities.

2.1.1.  Use Software Inventory as an Access Control Factor

   Some enterprises might define security policies that require
   connected endpoints to have certain pieces of security software
   installed.  By contrast, some security policies might prevent access
   to resources by endpoints that have certain prohibited pieces of
   software installed, since such applications might pose a security
   risk.  To support such policies, the NEA Server needs to collect
   software inventory evidence from a target endpoint that is seeking to
   initiate or continue connectivity to the enterprise resource.

   Based on this specification, the SWIMA-PC can provide a complete or
   partial inventory to the SWIMA-PV as required to determine policy
   compliance.  The SWIMA-PV can then use this as evidence of compliance
   or non-compliance to make a policy-based access decision.









Schmidt, et al.              Standards Track                    [Page 8]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


2.1.2.  Central Stores of Up-to-Date Endpoint Software Inventory Data

   Many tools use information about an endpoint's software inventory to
   monitor and enforce the security of a network.  For example, a
   software-patching tool needs to determine if there is out-of-date
   software installed that needs to be updated.  A vulnerability
   management tool needs to identify endpoints with known vulnerable
   software installed (patched or otherwise) to gauge an endpoint's
   relative exposure to attack.  A license management tool needs to
   verify that all installed software within the enterprise is accounted
   for.  A central repository representing an up-to-date understanding
   of each endpoint's software inventory facilitates these activities.
   Multiple tools can share such a repository, ensuring that software
   inventory information is collected more frequently and efficiently,
   leading to a more complete and consistent understanding of installed
   software state as compared to each tool collecting the same inventory
   information from endpoints individually.

   This specification supports these activities through a number of
   mechanisms.  As noted above, a SWIMA-PC can provide a complete list
   of software present in an endpoint's Software Inventory Evidence
   Collection to the SWIMA-PV, which can then pass this information on
   to a central repository, such as a Configuration Management Database
   (CMDB) or similar application.  In addition, SWIMA-PCs are required
   to be able to monitor for changes to an endpoint's Software Inventory
   Evidence Collection in near real time and can be requested to
   immediately push reports of detected changes to the SWIMA-PV.  Thus,
   any central repository fed by a SWIMA-PV receiving inventory
   information can be updated quickly after a change occurs.  Keeping a
   central repository synchronized with current software inventory
   information in this way allows tools to make efficient decisions
   based on up-to-date, consistent information.

2.1.3.  PA-TNC Use Cases

   SWIMA is intended to operate over the PA-TNC interface and, as such,
   is intended to meet the use cases set out in the PA-TNC
   specification.

2.2.  Use Cases That Are Not Supported

   Some use cases not covered by this specification include:

   o  Addressing how the endpoint's Software Inventory Evidence
      Collection is populated.  In particular, NEA components are not
      expected to perform software discovery activities beyond compiling
      information in an endpoint's Software Inventory Evidence
      Collection.  This collection might come from multiple sources on



Schmidt, et al.              Standards Track                    [Page 9]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


      the endpoint (e.g., information generated dynamically by package
      management tools or discovery tools, as well as SWID tag files
      discovered on the filesystem).  While an enterprise might make use
      of software discovery capabilities to identify installed software,
      such capabilities are outside the scope of this specification.

   o  Converting inventory information expressed in a proprietary format
      into formats used in the attributes described in this
      specification.  Instead, this specification focuses exclusively on
      defining interfaces for the transportation of software
      information, expecting that reporting tools will converge around
      some set of standardized formats for this information.

   o  Mechanisms for a Posture Validator to request a specific list of
      software information based on arbitrary software properties.  For
      example, requesting only information about software from a
      particular vendor is not supported.  After the endpoint's Software
      Inventory Evidence Collection has been copied to some central
      location, such as the CMDB, processes there can perform queries
      based on any criteria present in the collected information, but
      this specification does not address using such queries to
      constrain the initial collection of this information from the
      endpoint.

   o  Use of properties of certain sources of software information that
      might facilitate local tests (i.e., on the endpoint) of endpoint
      state.  For example, the optional package_footprint field of an
      ISO SWID tag can contain a list of files and hash values
      associated with the software indicated by the tag.  Tools on the
      endpoint can use the values in this field to test for the presence
      of the indicated files.  Successful evaluation of such tests leads
      to greater assurance that the indicated software is present on the
      endpoint.  Currently, most SWID tag creators do not provide values
      for tag fields that support local testing.  For this reason, the
      added complexity of supporting endpoint testing using these fields
      is out of scope for this specification, but this topic may be
      considered in a future version.

2.3.  SWIMA Requirements

   Below are the requirements that SWIMA must meet in order to
   successfully play its role in the NEA architecture.

   Efficient:  The NEA architecture enables delay of network access
      until the endpoint is determined not to pose a security threat to
      the network, based on its asserted integrity information.  To
      minimize user frustration, SWIMA ought to minimize overhead delays
      and make PA-TNC communications as rapid and efficient as possible.



Schmidt, et al.              Standards Track                   [Page 10]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   Scalable:  SWIMA needs to be usable in enterprises that contain tens
      of thousands of endpoints or more.  As such, it needs to allow
      security tools to make decisions based on up-to-date information
      about an endpoint's software inventory without creating an
      excessive burden on the enterprise's network.

   Support precise and complete historical reporting:  This
      specification outlines capabilities that support real-time
      understanding of the state of endpoints in a network in a way that
      can be used by other tools.  One means of facilitating such an
      outcome is for a CMDB to be able to contain information about all
      endpoints connected to the enterprise for all points in time
      between the endpoint's first connection and the present.  In such
      a scenario, it is necessary that any SWIMA-PC be able to report
      any changes to its Software Inventory Evidence Collection in near
      real time while connected and, upon reconnection to the
      enterprise, be able to update the NEA Server (and, through it, the
      CMDB) with regard to the state of its Software Inventory Evidence
      Collection throughout the entire interval when it was not
      connected.

2.4.  Non-SWIMA Requirements

   There are certain capabilities that users of SWIMA might require but
   that are beyond the scope of SWIMA itself and need to be addressed by
   other standards.

   Confidentiality:  SWIMA does not define a mechanism for
      confidentiality, nor is confidentiality automatically provided by
      using the PA-TNC interface.  In the NEA architecture,
      confidentiality is generally provided by the underlying transport
      protocols, such as the PT binding to TLS [RFC6876] or PT-EAP
      (Posture Transport for Tunneled Extensible Authentication Protocol
      (EAP) Methods) [RFC7171]; see Section 7 for more information on
      related standards.  The information conveyed by SWIMA is often
      sensitive in nature for both security (Section 8) and privacy
      (Section 9) reasons.  Those who implement SWIMA need to ensure
      that appropriate NEA transport mechanisms are employed to meet
      confidentiality requirements.












Schmidt, et al.              Standards Track                   [Page 11]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


2.5.  Assumptions

   The Posture Broker Client and Posture Broker Server are assumed to
   provide reliable delivery for PA-TNC messages and attributes sent
   between the SWIMA-PCs and the SWIMA-PVs.  "Reliable delivery" means
   that either a message is delivered or the sender is made aware of the
   delivery failure.  In the event that reliable delivery cannot be
   provided, some SWIMA features, primarily subscriptions, might not
   behave as expected.

2.6.  Assumptions Not Made

   This specification explicitly does not assume that software inventory
   information exchanges reflect the software installation state of the
   endpoint.  This specification does not attempt to detect when the
   endpoint is providing false information, either through malice or
   error, but instead focuses on correctly and reliably providing the
   reported Software Inventory Evidence Collection to the NEA Server.
   Tools that employ the SWIMA standard can include methods to help
   verify the accuracy of reports, but how those tools do so is beyond
   the scope of this specification.

   Similarly, this specification makes no assumption about the
   completeness of the Software Inventory Evidence Collection's coverage
   of the total set of software installed on the endpoint.  It is
   possible, and even likely, that some installed software is not
   represented by a record in an endpoint's Software Inventory Evidence
   Collection.  Instead, SWIMA ensures that what does get reported is
   reported consistently and that the software products that are
   reported can be reliably tracked.

   See Section 8 for more on this security consideration.

3.  System Requirements

   SWIMA facilitates the exchange of software inventory and event
   information.  Specifically, each application supporting SWIMA
   includes a component known as the SWIMA-PC that receives SWIMA
   attributes.  The SWIMA-PC is also responsible for sending appropriate
   SWIMA attributes back to the SWIMA-PV in response.  This section
   outlines what software inventories and events are and the
   requirements on SWIMA-PCs and SWIMA-PVs in order to support the
   stated use cases of this specification.








Schmidt, et al.              Standards Track                   [Page 12]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


3.1.  Data Sources

   The records in an endpoint's Software Inventory Evidence Collection
   come from one or more "sources".  A source represents one collection
   of software inventory information about the endpoint.  Examples of
   sources include, but are not limited to, ISO SWID tags deposited on
   the filesystem and collected therefrom, information derived from
   package managers, and the output of software inventory-scanning
   tools.

   There is no expectation that any one source of inventory information
   will have either perfect or complete software inventory information.
   For this reason, this specification supports the simultaneous use of
   multiple sources of software inventory information.  Each source
   might have its own "sphere of expertise" and report the software
   within that sphere.  For example, a package manager would have an
   excellent understanding of the software that it managed but would not
   necessarily have any information about software installed via other
   means.

   A SWIMA-PC is not required to utilize every possible source of
   software information on its endpoint.  Some SWIMA-PCs might be
   explicitly tied only to one or a handful of software inventory
   sources, or a given SWIMA-PC could be designed to dynamically
   accommodate new sources.  For all software inventory evidence sources
   that a particular SWIMA-PC supports, it MUST completely support all
   requirements of this specification with regard to those sources.  A
   potential source that cannot support some set of required
   functionality (e.g., it is unable to monitor the software it reports
   for change events, as discussed in Section 3.6) MUST NOT be used as a
   source of endpoint software inventory information, even if it could
   provide some information.  In other words, a source either supports
   full functionality as described in this specification or cannot be
   used at all.  In the event that a previously used source becomes
   unavailable, this would be treated as a discontinuity in the
   SWIMA-PC's reporting.  Section 3.7.1 describes how to use changes in
   the Event Identifier (EID) Epoch value to indicate a reporting
   discontinuity.

   When sending information about installed software, the SWIMA-PC MUST
   include the complete set of relevant data from all supported sources
   of software inventory evidence.  In other words, sources need to be
   used consistently.  This is because if a particular source is
   included in an initial inventory but excluded from a later inventory,
   the SWIMA-PV receiving this information might reasonably conclude
   that the software reported by that source was no longer installed on
   the endpoint.  As such, it is important that all supported sources be
   used every time the SWIMA-PC provides information to a SWIMA-PV.



Schmidt, et al.              Standards Track                   [Page 13]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   Note that if a SWIMA-PC collects data from multiple sources, it is
   possible that some software products might be "double counted".  This
   can happen if two or more sources of inventory evidence provide a
   record for a single installation of a software product.  When a
   SWIMA-PC reports information or records events from multiple
   inventory evidence sources, it MUST use the information those sources
   provide, rather than attempt to perform some form of reduction.  In
   other words, if multiple sources report records corresponding to a
   single installation of a software product, all such records from each
   source are required to be part of the SWIMA-PC's processing even if
   this might lead to multiple reporting, and the SWIMA-PC is not to
   ignore some records to avoid such multiple reporting.

   All inventory records reported by a SWIMA-PC include a Source
   Identifier linking them to a particular source.  Source Identifiers
   are discussed more in Section 3.4.5.  As discussed in that section,
   Source Identifiers can help consumers of SWIMA data identify cases of
   multiple reporting.

3.2.  Data Models

   SWIMA conveys records about software presence from a SWIMA-PC to a
   SWIMA-PV.  SWIMA does not manage the actual generation or collection
   of such records on the endpoint.  As a result, information available
   to SWIMA-PCs might come in a variety of formats, and a SWIMA-PC could
   have little control over the format of the data made available to it.
   Because of this, SWIMA places no constraints on the format of these
   generated records and supports an open set of record formats by which
   installed software instances can be described.  The following terms
   are used in this document:

   o  Data model - The format used to structure data within a given
      record.  SWIMA does not constrain the data models it conveys.

   o  Record - A populated instance of some data model that describes a
      software product.

   Do not confuse the "data model" described here with the structure of
   the SWIMA messages and attributes used to convey information between
   SWIMA-PVs and SWIMA-PCs.  The SWIMA standard dictates the structure
   of its messages and attributes.  Some attributes, however, have
   specific fields used to convey inventory records, and those fields
   support an extensible list of data models for their values.  In other
   words, SWIMA data models provide an extension point within SWIMA
   attributes that allows the structure of inventory records to evolve.






Schmidt, et al.              Standards Track                   [Page 14]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   The data model used to structure software inventory information has
   very little impact on the behavior of the components defined in this
   specification.  The SWIMA-PV has no dependency on the data model of
   records conveyed in SWIMA messages.  For this reason, it MUST NOT
   reject a message or respond with a PA-TNC Error due to the data model
   used to structure records in attributes it receives.  Similarly, it
   MUST NOT reject a message or respond with a PA-TNC Error if a record
   fails to comply with a stated format, unless that failure prevents
   correct parsing of the attribute itself.  In short, the record bodies
   are effectively treated as "black boxes" by the SWIMA-PV.  (Note that
   the SWIMA-PV might serve as the "front end" of other functionality
   that does have a dependency on the data model used to structure
   software information, but any such dependency is beyond the scope of
   this specification and needs to be addressed outside the behaviors
   specified in this document.  This specification is only concerned
   with the collection and delivery of software inventory information;
   components that consume and use this information are a separate
   concern.)

   The SWIMA-PC does have one functional dependency on the data models
   used in the software records it delivers, but only insofar as it is
   required to deterministically create a Software Identifier (described
   in Section 3.4.1) based on each record it delivers.  The SWIMA-PC
   MUST be able to generate a Software Identifier for each record it
   delivers, and if the SWIMA-PC cannot do so, it cannot deliver the
   record.  All SWIMA-PCs MUST at least be able to generate Software
   Identifiers for the data model types specified in Section 6 of this
   document.  A SWIMA-PC MAY include the ability to generate Software
   Identifiers for other data model types and thus be able to support
   them as well.





















Schmidt, et al.              Standards Track                   [Page 15]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


3.3.  Basic Attribute Exchange

   In the most basic exchange supported by this specification, a
   SWIMA-PV sends a request to the SWIMA-PC, requesting some type of
   information about the endpoint's software inventory.  This simple
   exchange is shown in Figure 2.

       +-------------+                          +--------------+
       |  SWIMA-PC   |                          |   SWIMA-PV   |  Time
       +-------------+                          +--------------+   |
             |                                         |           |
             |<------------SWIMA Request---------------|           |
             |                                         |           |
             |-------------SWIMA Response------------->|           |
             |                                         |           V

                 Figure 2: Basic SWIMA Attribute Exchange

   Upon receiving such a SWIMA Request from the SWIMA-PV, the SWIMA-PC
   is expected to collect all the relevant software inventory
   information from the endpoint's Software Inventory Evidence
   Collection and place it within its response attribute.

   SWIMA-PVs MUST discard, without error, any SWIMA Response attributes
   that they receive for which they do not know the SWIMA Request
   parameters that led to this SWIMA Response.  This is due to the fact
   that the SWIMA Request includes parameters that control the nature of
   the response (as will be described in the following sections);
   without knowing those parameters, the SWIMA Response cannot be
   reliably interpreted.  Each SWIMA Request includes a Request ID,
   which is echoed in any SWIMA Response to that request and allows
   matching of responses to requests.  See Section 5.5 for more on
   Request IDs.  Receiving an unsolicited SWIMA Response attribute will
   most often happen when a NEA Server has multiple SWIMA-PVs; one
   SWIMA-PV sends a SWIMA Request, but unless exclusive delivery
   [RFC5793] is set by the sender and honored by the recipient, multiple
   SWIMA-PVs will receive copies of the resulting SWIMA Response.  In
   this case, the SWIMA-PV that didn't send the SWIMA Request would lack
   the context necessary to correctly interpret the SWIMA Response it
   received and would simply discard it.  Note, however, that
   proprietary measures might allow a SWIMA-PV to discover the SWIMA
   Request parameters for a SWIMA Response even if that SWIMA-PV did not
   send the given SWIMA Request.  As such, there is no blanket
   requirement for a SWIMA-PV to discard all SWIMA Responses to SWIMA
   Requests that the SWIMA-PV did not generate itself -- only that
   SWIMA-PVs are required to discard SWIMA Responses for which they
   cannot get the necessary context to interpret.




Schmidt, et al.              Standards Track                   [Page 16]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   In the case that it is possible to do so, the SWIMA-PC SHOULD send
   its SWIMA Response attribute to the SWIMA-PV that requested it, using
   exclusive delivery as described in Section 4.5 of "PB-TNC: A Posture
   Broker (PB) Protocol Compatible with Trusted Network Connect (TNC)"
   [RFC5793].  Exclusive delivery requests that only the sender of the
   SWIMA Request be the receiver of the resulting SWIMA Response.  Note,
   however, that PB-TNC does not require the recipient to honor the
   exclusive delivery flag in messages that it receives, so setting the
   flag cannot be guaranteed to prevent a SWIMA-PV from receiving
   unsolicited SWIMA Responses.

   Note that, in the case that a single endpoint hosts multiple
   SWIMA-PCs, a single SWIMA Request could result in multiple SWIMA
   Responses.  SWIMA-PVs need to handle such an occurrence without
   error.

   All numeric values sent in SWIMA messages are sent in network
   (big endian) byte order.

3.4.  Core Software-Reporting Information

   Different parameters in the SWIMA Request can influence what
   information is returned in the SWIMA Response.  However, while each
   SWIMA Response provides different additional information about this
   installed software, the responses all share a common set of fields
   that support reliable software identification on an endpoint.  These
   fields include Software Identifiers, Data Model Type, Record
   Identifiers, Software Locators, and Source Identifiers.  These fields
   are present for each reported piece of software in each type of SWIMA
   Response.  The following sections examine these information types in
   more detail.

3.4.1.  Software Identifiers

   A Software Identifier uniquely identifies a specific version of a
   specific software product.  The SWIMA standard does not dictate the
   structure of a Software Identifier (beyond stating that it is a
   string) or define how it is created.  Instead, each data model
   described in the "Software Data Model Types" registry (Section 10.5)
   includes its own rules for how a Software Identifier is created based
   on a record in the endpoint's Software Inventory Evidence Collection
   expressed in that data model.  Other data models will have their own
   procedures for the creation of associated Software Identifiers.
   Within SWIMA, the Software Identifier is simply an opaque string, and
   there is never any need to unpack any information that might be part
   of that identifier.





Schmidt, et al.              Standards Track                   [Page 17]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   A Software Identifier is a fraction of the size of the inventory
   record from which it is derived.  For this reason, it is often more
   efficient to collect full inventories using Software Identifiers and
   only collect full records when necessary using targeted requests.
   For some combinations of data models and sources, the full record
   might never be necessary, as the identifier can be directly
   correlated to the contents of the full record.  This is possible with
   authoritative SWID tags, since these tags always have the same
   contents and thus a Software Identifier derived from these tags can
   be used as a lookup to a local copy of the full tag.  For other
   combinations of source and data model, a server might not be able to
   determine the specific software product and version associated with
   the identifier without requesting the delivery of the full record.
   However, even in those cases, downstream consumers of this
   information might never need the full record as long as the Software
   Identifiers they receive can be tracked reliably.  A SWIMA-PV can use
   Software Identifiers to track the presence of specific software
   products on an endpoint over time in a bandwidth-efficient manner.

   There are two important limitations of Software Identifiers to keep
   in mind:

   1.  The identifiers do not necessarily change when the associated
       record changes.  In some situations, a record in the endpoint's
       Software Inventory Evidence Collection will change due to new
       information becoming available or in order to correct prior
       errors in that information.  Such changes might or might not
       result in changes to the Software Identifier, depending on the
       nature of the changes and the rules governing how Software
       Identifiers are derived from records of the appropriate data
       model.

   2.  It is possible that a single software product is installed on a
       single endpoint multiple times.  If these multiple installation
       instances are reported by the same source using the same data
       format, then this can result in identical Software Identifiers
       for both installation instances.  In other words, Software
       Identifiers might not uniquely identify installation instances;
       they are just intended to uniquely identify software products
       (which might have more than one installation instance).  Instead,
       to reliably distinguish between multiple instances of a single
       software product, one needs to make use of Record Identifiers as
       described in Section 3.4.3.








Schmidt, et al.              Standards Track                   [Page 18]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


3.4.2.  Data Model Type

   The Data Model Type consists of two fields: Data Model Type PEN and
   Data Model Type.  ("PEN" stands for "Private Enterprise Number".)
   The combination of these fields is used to identify the type of data
   model of the associated software inventory record.  The data model is
   significant not only because it informs the recipient of the data
   model of the associated record but also because the process for
   generating the Software Identifier for the record depends on the
   record's data model.  Clearly identifying the type of data model from
   which the Software Identifier was derived thus provides useful
   context for that value.

   The PEN identifies the organization that assigns meaning to the Data
   Model Type field value.  PENs are managed by IANA in the "Private
   Enterprise Numbers" registry.  PENs allow vendors to designate their
   own set of data models for software inventory description.  IANA
   reserves the PEN of 0x000000.  Data Model Types associated with this
   PEN are defined in the "Software Data Model Types" registry; see
   Section 10.5 of this specification.  Note that this IANA table
   reserves all values greater than or equal to 0xC0 (192) for local
   enterprise use.  This means that local enterprises can use custom
   data formats and indicate them with the IANA PEN and a Data Model
   Type value between 0xC0 and 0xFF, inclusive.  Those enterprises are
   responsible for configuring their SWIMA-PCs to correctly report those
   custom data models.

3.4.3.  Record Identifiers

   A Record Identifier is a 4-byte unsigned integer that is generated by
   the SWIMA-PC and is uniquely associated with a specific record within
   the endpoint's Software Inventory Evidence Collection.  The SWIMA-PC
   MUST assign a unique identifier to each record when it is added to
   the endpoint's Software Inventory Evidence Collection.  The Record
   Identifier SHOULD remain unchanged if that record is modified.
   However, it is recognized that, in some circumstances, record
   modification might be hard to distinguish from record deletion
   followed by creation of a new record.  For this reason, retaining a
   constant Record Identifier across a record modification is
   recommended but not required.  Similarly, in the case that the
   software product associated with a record is moved, ideally the
   Record Identifier for the record of the moved software will remain
   unchanged, reflecting that it represents the same software product
   instance, albeit in a new location.  However, this level of tracking
   could prove difficult to achieve and is not required.  The SWIMA-PC
   might wish to assign Record Identifiers sequentially, but any scheme
   is acceptable, provided that no two records receive the same
   identifier.



Schmidt, et al.              Standards Track                   [Page 19]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   Servers can use Record Identifiers to distinguish between multiple
   instances of a single software product installed on an endpoint.
   Since each installation instance of a software product is associated
   with a separate record, servers can use the Record Identifier to
   distinguish between instances.  For example, if an event is reported
   (as described in Section 3.7), the Record Identifier will allow the
   server to discern which instance of a software product is involved.

3.4.4.  Software Locators

   In addition to the need to identify what software products are on an
   endpoint, some processes that use inventory information also need to
   know where software is located on the endpoint.  This information
   might be needed to direct remediation actions or similar processes.
   For this reason, every reported software product also includes a
   Software Locator to identify where the software is installed on the
   endpoint.

   If the location is not provided directly by the data source, the
   SWIMA-PC is responsible for attempting to determine the location of
   the software product.  The "location" of a product SHOULD be the
   directory in which the software product's executables are kept.  The
   SWIMA-PC MUST be consistent in reporting the location of a software
   product.  In other words, assuming that a software product has not
   moved, the SWIMA-PC cannot use one location in one report and a
   different location for the same software product in another.  (If a
   software product has moved, the Software Locator needs to reflect the
   new location.)

   The location is expressed as a URI string.  The string MUST conform
   to URI syntax requirements [RFC3986].  The URI scheme describes the
   context of the described location.  For example, in most cases the
   location of the installed software product will be expressed in terms
   of its path in the filesystem.  For such locations, the location URI
   scheme MUST be "file", and the URI MUST conform to the "file" URI
   scheme standard [RFC8089], including the percent-encoding of
   whitespace and other special characters.  It is possible that other
   schemes could be used to represent other location contexts.  Apart
   from specifying the use of the "file" scheme, this specification does
   not identify other schemes or define their use.  When representing
   software products in other location contexts, tools MUST be
   consistent in their use of schemes, but the exact schemes are not
   normatively defined here.  SWIMA implementations are not limited to
   the IANA list of URI schemes <https://www.iana.org/assignments/
   uri-schemes/> and can define new schemes to support other types of
   application locations.





Schmidt, et al.              Standards Track                   [Page 20]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   It is possible that a SWIMA-PC is unable to determine the location of
   a reported software product.  In this case, the SWIMA-PC MUST provide
   a zero-length Software Locator.

3.4.5.  Source Identifiers

   All SWIMA-PCs MUST track the source of each piece of software
   information they report.  Each time a SWIMA-PC gets information to
   send to a given SWIMA-PV from a new source (from the perspective of
   that SWIMA-PV), the SWIMA-PC MUST assign that source a Source
   Identifier, which is an 8-bit unsigned integer.  Each item reported
   includes the number of the Source Identifier for the source that
   provided that information.  All information that is provided by that
   source MUST be delivered with this same Source Identifier.  This MUST
   be done for each source used.  If the SWIMA-PC is ever unclear as to
   whether a given source is new or not, it MUST assume that this is a
   new source and assign it a new Source Identifier.  Source Identifier
   numbers do not need to be assigned sequentially.  SWIMA does not
   support the presence of more than 256 sources, as the chance that a
   single endpoint will have more than 256 methods of collecting
   inventory information is vanishingly small.  All possible values
   between 0 and 255 are valid; there are no reserved Source Identifier
   numbers.

   Source Identifiers can help with (although will not completely
   eliminate) the challenges posed by multiple reporting of a single
   software instance.  If multiple sources each report the same type of
   software product once, there is most likely a single instance of that
   product installed on the endpoint, which each source has detected
   independently.  On the other hand, if multiple instances are reported
   by a single source, this almost certainly means that there are
   actually multiple instances that are being reported.

   The SWIMA-PC is responsible for tracking associations between Source
   Identifiers and the given data source.  This association MUST remain
   consistent with regard to a given SWIMA-PV while there is an active
   PB-TNC session with that SWIMA-PV.  The SWIMA-PC MAY have a different
   Source Identifier association for different SWIMA-PVs.  Likewise, the
   SWIMA-PC MAY change the Source Identifier association for a given
   SWIMA-PV if the PB-TNC session terminates.  However, implementers of
   SWIMA-PCs will probably find it easier to manage associations by
   maintaining the same association for all SWIMA-PVs and across
   multiple sessions.

   Of special note, event records reported from the SWIMA-PC's event log
   (discussed in Section 3.7) also need to be sent with their associated
   data source.  The Source Identifier reported with events MUST be the
   current (i.e., at the time the event is sent) Source Identifier



Schmidt, et al.              Standards Track                   [Page 21]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   associated with the data source that produced the event, regardless
   of how long ago that event occurred.  Event logs are likely to
   persist far longer than a single PB-TNC session.  SWIMA-PCs MUST
   ensure that each event can be linked to the appropriate data source,
   even if the Source Identifiers used when the event was created have
   since been reassigned.  In other words, when sending an event, it
   needs to be sent with the Source Identifier currently linked to the
   data source that produced it, regardless of whether a different
   Source Identifier would have been associated with the event when the
   event was first created.

   Note that the Source Identifier is primarily used to support
   recognition, rather than identification, of sources.  That is to say,
   a Source Identifier can tell a recipient that two events were
   reported by the same source, but the number will not necessarily help
   that recipient determine which source was used.  Moreover, different
   SWIMA-PCs will not necessarily use the same Source Identifiers for
   the same sources.  SWIMA-PCs MUST track the assignment of Source
   Identifiers to ensure consistent application thereof.  SWIMA-PCs MUST
   also track which Source Identifiers have been used with each SWIMA-PV
   with which they communicate.

3.4.6.  Using Software and Record Identifiers in SWIMA Attributes

   A SWIMA attribute reporting an endpoint's Software Inventory Evidence
   Collection always contains the Software Identifiers associated with
   the identified software products.  A SWIMA attribute might or might
   not also contain copies of Software Inventory Evidence Records.  The
   attribute exchange is identical to the diagram shown in Figure 2,
   regardless of whether Software Inventory Evidence Records are
   included.  The SWIMA Request attribute indicates whether the response
   is required to include Software Inventory Evidence Records.
   Excluding Software Inventory Evidence Records can reduce the
   attribute size of the response by multiple orders of magnitude when
   compared to sending the same inventory with full records.

3.5.  Targeted Requests

   Sometimes a SWIMA-PV does not require information about every piece
   of software on an endpoint but only needs to receive updates about
   certain software instances.  For example, enterprise endpoints might
   be required to have certain software products installed and to keep
   these updated.  Instead of requesting a complete inventory just to
   see if these products are present, the SWIMA-PV can make a "targeted
   request" for the software in question.






Schmidt, et al.              Standards Track                   [Page 22]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   Targeted requests follow the same attribute exchange as the exchange
   described in Figure 2.  The SWIMA-PV targets its request by providing
   one or more Software Identifiers in its SWIMA Request attribute.  The
   SWIMA-PC MUST then limit its response to contain only records that
   match the indicated Software Identifier(s).  This allows the network
   exchange to exclude information that is not relevant to a given
   policy question, thus reducing unnecessary bandwidth consumption.
   The SWIMA-PC's response might or might not include Software Inventory
   Evidence Records, depending on the parameters of the SWIMA Request.

   Note that targeted requests identify the software relevant to the
   request only through Software Identifiers.  This specification does
   not support arbitrary, parameterized querying of records.  For
   example, one cannot request all records from a certain software
   publisher or all records created by a particular data source.
   Targeted requests only allow a requester to request specific software
   (as identified by their Software Identifiers) and receive a response
   that is limited to the named software.

   There is no assumption that a SWIMA-PC will recognize "synonymous
   records" -- that is, records from different sources for the same
   software.  Recall that different sources and data models may use
   different Software Identifier strings for the same software product.
   The SWIMA-PC returns only records that match the Software Identifiers
   in the SWIMA Request, even if there might be other records in the
   endpoint's Software Inventory Evidence Collection for the same
   software product.  This is necessary because SWIMA-PCs might not have
   the ability to determine that two Software Identifiers refer to the
   same product.

   A targeted SWIMA Request attribute does not specify Record
   Identifiers or Software Locators.  The response to a targeted request
   MUST include all records associated with the named Software
   Identifiers, including the case where there are multiple records
   associated with a single Software Identifier.

   SWIMA-PCs MUST accept targeted requests and process them correctly as
   described above.  SWIMA-PVs MUST be capable of making targeted
   requests and processing the responses thereto.

3.6.  Monitoring Changes in an Endpoint's Software Inventory Evidence
      Collection

   The software collection on an endpoint is not static.  As software is
   installed, uninstalled, patched, or updated, the Software Inventory
   Evidence Collection is expected to change to reflect the new software
   state on the endpoint.  Different data sources might update the
   evidence collection at different rates.  For example, a package



Schmidt, et al.              Standards Track                   [Page 23]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   manager might update its records in the Software Inventory Evidence
   Collection immediately whenever it is used to add or remove a
   software product.  By contrast, sources that perform periodic
   examination of the endpoint would likely only update their records in
   the Software Inventory Evidence Collection after each examination.

   All SWIMA-PCs MUST be able to detect changes to the Software
   Inventory Evidence Collection.  Specifically, SWIMA-PCs MUST be able
   to detect:

   o  The creation of records

   o  The deletion of records

   o  The alteration of records

   An "alteration" is anything that modifies the contents of a record
   (or would modify it, if the record is dynamically generated on
   demand) in any way, regardless of whether the change is functionally
   meaningful.

   SWIMA-PCs MUST detect such changes to the endpoint's Software
   Inventory Evidence Collection in close to real time (i.e., within
   seconds) when the SWIMA-PC is operating.  In addition, in the case
   where there is a period during which the SWIMA-PC is not operating,
   the SWIMA-PC MUST be able to determine the net change to the
   endpoint's Software Inventory Evidence Collection over the period it
   was not operational.  Specifically, the "net change" represents the
   difference between (1) the state of the endpoint's Software Inventory
   Evidence Collection when the SWIMA-PC was last operational and
   monitoring its state and (2) the state of the endpoint's Software
   Inventory Evidence Collection when the SWIMA-PC resumed operation.
   Note that a net change might not reflect the total number of change
   events over this interval.  For example, if a record was altered
   three times during a period when the SWIMA-PC was unable to monitor
   for changes, the net change of this interval might only note that
   there was an alteration to the record, but not how many individual
   alteration events occurred.  It is sufficient for a SWIMA-PC's
   determination of a net change to note that there was a difference
   between the earlier and current state, rather than to enumerate all
   the individual events that allowed the current state to be reached.

   The SWIMA-PC MUST assign a time to each detected change in the
   endpoint's Software Inventory Evidence Collection.  These timestamps
   correspond to the SWIMA-PC's best understanding as to when the
   detected change occurred.  For changes to the endpoint's Software
   Inventory Evidence Collection that occur while the SWIMA-PC is
   operating, the SWIMA-PC ought to be able to assign a time to the



Schmidt, et al.              Standards Track                   [Page 24]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   event that is accurate to within a few seconds.  For changes to the
   endpoint's Software Inventory Evidence Collection that occur while
   the SWIMA-PC is not operational, upon becoming operational the
   SWIMA-PC needs to make a best guess as to the time of the relevant
   events (possibly by looking at timestamps on files), but these values
   might be off.  In the case of dynamically generated records, the time
   of change is the time at which the data from which the records are
   generated changes, not the time at which a changed record is
   generated.  For example, if records are dynamically generated based
   on data in an RPM database (<http://rpm.org/>), the time of change
   would be when the RPM database changed.

   With regard to deletions of records, the SWIMA-PC needs to detect the
   deletion of a given record and MUST retain a copy of the full deleted
   record along with the associated Record Identifier and Software
   Locator so that the record and associated information can be provided
   to the SWIMA-PV upon request.  This copy of the record MUST be
   retained for a reasonable amount of time.  Vendors and administrators
   determine what "reasonable" means, but a copy of the record SHOULD be
   retained for as long as the event recording the deletion of the
   record remains in the SWIMA-PC's event log (as described in
   Section 3.7).  This is recommended, because as long as the event is
   in the SWIMA-PC's event log the SWIMA-PC might send a change event
   attribute (described in Section 3.7) that references this record, and
   a copy of the record is needed if the SWIMA-PV wants a full copy of
   the relevant record.  In the case that a SWIMA-PC is called upon to
   report a deletion event that is still in the event log but where the
   record itself is no longer available, the SWIMA-PC will still return
   an entry corresponding to the deletion event, but the field of that
   entry that would normally contain the full copy of the record SHOULD
   be zero-length.

   With regard to alterations to a record, SWIMA-PCs MUST detect any
   alterations to the contents of a record.  Alterations need to be
   detected even if they have no functional impact on the record.  A
   good guideline is that any alteration to a record that might change
   the value of a hash taken on the record's contents needs to be
   detected by the SWIMA-PC.  A SWIMA-PC might be unable to distinguish
   modifications to the contents of a record from modifications to the
   metadata that the filesystem associates with the record.  For
   example, a SWIMA-PC might use the "last modification" timestamp as an
   indication of alteration to a given record, but a record's last
   modification time can change for reasons other than modifications to
   the record's contents.  A SWIMA-PC is still considered compliant with
   this specification if it also reports metadata change events that do
   not change the record itself as alterations to the record.  In other
   words, while SWIMA-PC implementers are encouraged to exclude
   modifications that do not affect the bytes within the record,



Schmidt, et al.              Standards Track                   [Page 25]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   discriminating between modifications to file contents and changes to
   file metadata can be difficult and time consuming on some systems.
   As such, as long as the alterations detected by a SWIMA-PC always
   cover all modifications to the contents of a record, the SWIMA-PC is
   considered compliant even if it also registers alterations that do
   not modify the contents of a record as well.  When recording an
   alteration to a record, the SWIMA-PC is only required to note that an
   alteration occurred.  The SWIMA-PC is not required to note or record
   how the record was altered, nor is it possible to include such
   details in SWIMA attributes reporting the change to a SWIMA-PV.
   There is no need to retain a copy of the original record prior to the
   alteration.

   When a record changes, it SHOULD retain the same Record Identifier.
   The Software Locator might or might not change, depending on whether
   the software changed locations during the changes that led to the
   record change.  A record change MUST retain the same Software
   Identifier.  This means that any action that changes a software
   product (e.g., application of a patch that results in a change to the
   product's version) MUST NOT be reflected by a record change but
   instead MUST result in the deletion of the old record and the
   creation of a new record.  This reflects the requirement that a
   record in the endpoint's Software Inventory Evidence Collection
   correspond directly with an instance of a specific software product.

3.7.  Reporting Change Events

   As noted in Section 3.6, SWIMA-PCs are required to detect changes to
   the endpoint's Software Inventory Evidence Collection (creation,
   deletion, and alteration) in near real time while the SWIMA-PC is
   operational, and a given SWIMA-PC MUST be able to account for any net
   change to the endpoint's Software Inventory Evidence Collection that
   occurs when the SWIMA-PC is not operational.  However, to be of use
   to the enterprise, the NEA Server needs to be able to receive these
   events and be able to understand how new changes relate to earlier
   changes.  In SWIMA, this is facilitated by reporting change events.
   All SWIMA-PCs MUST be capable of receiving requests for change events
   and sending change event attributes.  All SWIMA-PVs MUST be capable
   of requesting and receiving change event attributes.












Schmidt, et al.              Standards Track                   [Page 26]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


3.7.1.  Event Identifiers

   To be useful, change events need to be correctly ordered.  The
   ordering of events is facilitated by two pieces of information: an
   Event Identifier (EID) value and an EID Epoch value.

   An EID is a 4-byte unsigned integer that the SWIMA-PC assigns
   sequentially to each observed event (whether detected in real time or
   deduced by looking for net changes over a period of SWIMA-PC
   inactivity).  All EIDs exist within the context of some "EID Epoch",
   which is also represented as a 4-byte unsigned integer.  EID Epochs
   are used to ensure synchronization between the SWIMA-PC and any
   SWIMA-PVs with which it communicates.  EID Epoch values MUST be
   generated in such a way as to minimize the chance that an EID Epoch
   will be reused, even in the case where the SWIMA-PC reverts to an
   earlier state.  For this reason, sequential EID Epochs are
   discouraged, since loss of state could result in value reuse.  There
   are multiple reasons that a SWIMA-PC might need to deliberately reset
   its EID counter, including exhaustion of available EID values, the
   need to purge entries from the event log to recover memory, or
   corruption of the event log.  In all cases where a SWIMA-PC needs to
   reset its EID counter, a new EID Epoch MUST be selected.

   Within an Epoch, EIDs MUST be assigned sequentially, so that if a
   particular event is assigned an EID of N, the next observed event is
   given an EID of N+1.  In some cases, events might occur
   simultaneously, or the SWIMA-PC might not otherwise be able to
   determine an ordering for events.  In these cases, the SWIMA-PC
   creates an arbitrary ordering of the events and assigns EIDs
   according to this ordering.  Two change events MUST NOT ever be
   assigned the same EID within the same EID Epoch.  No meaningful
   comparison can be made between EID values of different Epochs.

   The EID value of 0 is reserved and MUST NOT be associated with any
   event.  Specifically, an EID of 0 in a SWIMA Request attribute
   indicates that a SWIMA-PV wants an inventory response rather than an
   event response, while an EID of 0 in a SWIMA Response is used to
   indicate the initial state of the endpoint's Software Inventory
   Evidence Collection prior to the observation of any events.  Thus,
   the very first recorded event in a SWIMA-PC's records within an EID
   Epoch MUST be assigned a value of 1.  Note that EID and EID Epoch
   values are assigned by the SWIMA-PC without regard to whether events
   are being reported to one or more SWIMA-PVs.  The SWIMA-PC records
   events and assigns EIDs during its operation.  All SWIMA-PVs that
   request event information from the SWIMA-PC will have those requests
   served from the same event records and thus will see the same EIDs
   and EID Epochs for the same events.




Schmidt, et al.              Standards Track                   [Page 27]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   If a SWIMA-PC uses multiple sources, a SWIMA-PC's assignment of EIDs
   MUST reflect the presence and order of all events on the endpoint (at
   least for supported sources), regardless of the source.  This means
   that if source A experiences an event and then source B experiences
   two events, and then source A experiences another two events, the
   SWIMA-PC is required to capture five events with consecutive EID
   values reflecting the order in which the events occurred.

   The SWIMA-PC MUST ensure that there is no coverage gap (i.e., change
   events that are not recorded in the SWIMA-PC's records) in its change
   event records.  This is necessary because a coverage gap might give a
   SWIMA-PV a false impression of the endpoint's state.  For example, if
   a SWIMA-PV saw an event indicating that a particular record had been
   added to the endpoint's Software Inventory Evidence Collection but
   did not see any subsequent events indicating that the record in
   question had been deleted, it might reasonably assume that this
   record was still present and thus that the indicated software was
   still installed (assuming that the Epoch has not changed).  If there
   is a coverage gap in the SWIMA-PC's event records, however, this
   assumption could be false.  For this reason, the SWIMA-PC's event
   records MUST NOT contain gaps.  In the case where there are periods
   where it is possible that changes occurred without the SWIMA-PC
   detecting or recording them, the SWIMA-PC MUST either (1) compute a
   net change and update its event records appropriately or (2) pick a
   new EID Epoch to indicate a discontinuity with previous event
   records.

   Within a given Epoch, once a particular event has been assigned an
   EID, this association MUST NOT be changed.  That is, within an Epoch,
   once an EID is assigned to an event, that EID cannot be reassigned to
   a different event, and the event cannot be assigned a different EID.
   When the SWIMA-PC's Epoch changes, all of these associations between
   EIDs and events are cancelled, and EID values once again become free
   for assignment.

3.7.2.  Core Event-Tracking Information

   Whether reporting events or full inventories, it is important to know
   how the reported information fits into the overall timeline of change
   events.  This is why all SWIMA Response attributes include fields to
   place that response within the sequence of detected events.
   Specifically, all SWIMA Responses include a Last EID field and an EID
   Epoch field.  The EID Epoch field identifies the EID Epoch in which
   the SWIMA Response was sent.  If the SWIMA Response is reporting
   events, all reported events occurred within the named EID Epoch.  The
   Last EID (which is also always from the named EID Epoch) indicates
   the EID of the last recorded change event at the time that the SWIMA




Schmidt, et al.              Standards Track                   [Page 28]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   Response was sent.  These two fields allow any response to be placed
   in the context of the complete set of detected change events within a
   given EID Epoch.

3.7.3.  Updating Inventory Knowledge Based on Events

   Modern endpoints can have hundreds of software products installed,
   most of which are unlikely to change from one day to the next.  As
   such, instead of exchanging a complete list of an endpoint's
   inventory on a regular basis, one might wish to only identify changes
   since some earlier known state of this inventory.  This is readily
   facilitated by the use of EIDs to place change events in a context
   relative to the earlier state.

   As noted above, every SWIMA Response sent by a SWIMA-PC to a SWIMA-PV
   (as described in Sections 3.3 through 3.5) includes the EID Epoch and
   EID of the last event recorded prior to that response being compiled.
   This allows the SWIMA-PV to place all subsequently received event
   records in context relative to this SWIMA Response attribute (since
   the EIDs represent a total ordering of all changes to the endpoint's
   Software Inventory Evidence Collection).  Specifically, a SWIMA-PV
   (or, more likely, a database that collects and records its findings)
   can record an endpoint's full inventory and also the EID and Epoch of
   the most recent event reflected at the time of that inventory.  From
   that point on, if change events are observed, the attribute
   describing these events indicates the nature of the change, the
   affected records, and the order in which these events occurred (as
   indicated by the sequential EIDs).  Using this information, any
   remote record of the endpoint's Software Inventory Evidence
   Collection can be updated appropriately.

3.7.4.  Using Event Records in SWIMA Attributes

   A SWIMA-PV MUST be able to request a list of event records instead of
   an inventory.  The attribute flow in such an exchange looks the same
   as the basic flow shown in Figure 2.  The only difference is that in
   the SWIMA Request attribute the SWIMA-PV provides an EID other than
   0.  (An EID value of 0 in a SWIMA Request represents a request for an
   inventory.)  When the SWIMA-PC receives such a request, instead of
   identifying records from the endpoint's Software Inventory Evidence
   Collection, it consults its list of detected changes.  The SWIMA-PC
   MUST add an event record to the SWIMA Response attribute for each
   recorded change event with an EID greater than or equal to the EID in
   the SWIMA Request attribute (although the targeting of requests, as
   described in the next paragraph, might limit this list).  A list of
   event records MUST only contain events with EIDs that all come from
   the current Epoch.




Schmidt, et al.              Standards Track                   [Page 29]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   SWIMA-PVs can target requests for event records by including one or
   more Software Identifiers, as described in Section 3.5, in the SWIMA
   Request that requests an event record list.  A targeted request for
   event records is used to indicate that only events affecting software
   that matches one of the provided Software Identifiers are to be
   returned.  Specifically, in response to a targeted request for event
   records, the SWIMA-PC MUST exclude any event records that are less
   than the indicated EID (within the current EID Epoch) and exclude any
   event records where the affected software does not match one of the
   provided Software Identifiers.  This might mean that the resulting
   list of event records sent in the response attribute does not provide
   a continuous sequence of EIDs.  Both SWIMA-PCs and SWIMA-PVs MUST
   support targeted requests for event records.

3.7.5.  Partial and Complete Lists of Event Records in SWIMA Attributes

   Over time, a SWIMA-PC might record a large number of change events.
   If a SWIMA-PV requests all change events covering a long period of
   time, the resulting SWIMA Response attribute might be extremely
   large, especially if the SWIMA-PV requests the inclusion of Software
   Inventory Evidence Records in the response.  In the case that the
   resulting attribute is too large to send (because it exceeds either
   (1) the 4 GB attribute size limit imposed by the PA-TNC specification
   or (2) some smaller size limit imposed on the SWIMA-PC), the SWIMA-PC
   MAY send a partial list of event records back to the SWIMA-PV.

   The generation of a partial list of events in a SWIMA Response
   attribute requires the SWIMA-PC to identify a "consulted range" of
   EIDs.  A consulted range is the set of event records that are
   examined for inclusion in the SWIMA Response attribute and that are
   included in that attribute if applicable.  Recall that if a SWIMA
   Request is targeted, only event records that involve the indicated
   software would be applicable.  (See Section 3.5 for more on targeted
   requests.)  If a request is not targeted, all event records in the
   consulted range are applicable and are included in the SWIMA Response
   attribute.

   The lower bound of the consulted range MUST be the EID provided in
   the SWIMA Request.  (Recall that a SWIMA-PV indicates a request for
   event records by providing a non-zero EID value in the SWIMA Request.
   See Section 3.7.4.)  The upper bound of the consulted range is the
   EID of the latest event record (as ordered by EID values) that is
   included in the SWIMA Response attribute if it is applicable to the
   request.  The EID of this last event record is called the "Last
   Consulted EID".  The SWIMA-PC chooses this Last Consulted EID based
   on the size of the event record list it is willing to provide to the
   SWIMA-PV.




Schmidt, et al.              Standards Track                   [Page 30]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   A partial result list MUST include all applicable event records
   within the consulted range.  This means that for any applicable event
   record (i.e., any event record in a non-targeted request or any event
   record associated with software matching a requested Software
   Identifier in a targeted request) whose EID is greater than or equal
   to the EID provided in the SWIMA Request and whose EID is less than
   or equal to the Last Consulted EID, that event record MUST be
   included in the SWIMA Response conveying this partial list of event
   records.  This ensures that every partial list of event records is
   always complete within its indicated range.  Remember that for
   targeted requests, "complete" doesn't mean that all EIDs between the
   range endpoints are present -- only that every matching EID between
   the range endpoints is included.

   In addition to the EID Epoch and Last EID fields that are present in
   all SWIMA Responses, all SWIMA Response attributes that convey event
   records include a Last Consulted EID field.  Note that if responding
   to a targeted SWIMA Request, the SWIMA Response attribute might not
   contain the event record whose EID matches the Last Consulted EID
   value.  For example, that record might have been deemed inapplicable
   because it did not match the specified list of Software Identifiers
   in the SWIMA Request.

   If a SWIMA-PV receives a SWIMA Response attribute where the Last EID
   and Last Consulted EID fields are identical, the SWIMA-PV knows that
   it has received a result list that is complete, given the parameters
   of the request, up to the present time.

   On the other hand, if the Last EID is greater than the Last Consulted
   EID, the SWIMA-PV has received a partial result list.  (The Last
   Consulted EID MUST NOT exceed the Last EID.)  In this case, if the
   SWIMA-PV wishes to try to collect the rest of the partially delivered
   result list, it then sends a new SWIMA Request whose EID is one
   greater than the Last Consulted EID in the preceding response.  Doing
   this causes the SWIMA-PC to generate another SWIMA Response attribute
   containing event records where the earliest reported event record is
   the one immediately after the event record with the Last Consulted
   EID (since EIDs are assigned sequentially).  By repeating this
   process until it receives a SWIMA Response where the Last EID and
   Last Consulted EID are equal, the SWIMA-PV is able to collect all
   event records over a given range, even if the complete set of event
   records would be too large to deliver via a single attribute.

   Implementers need to be aware that a SWIMA Request might specify an
   EID that is greater than the EID of the last event recorded by a
   SWIMA-PC.  In accordance with the behaviors described in
   Section 3.7.4, a SWIMA-PC MUST respond to such a request with a SWIMA
   Response attribute that contains zero event records.  This is because



Schmidt, et al.              Standards Track                   [Page 31]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   the SWIMA-PC has recorded no event records with EIDs greater than or
   equal to the EID in the SWIMA Request.  In such a case, the Last
   Consulted EID field MUST be set to the same value as the Last EID
   field in this SWIMA Response attribute.  This case is called out
   because the consulted range on a SWIMA-PC in such a situation is a
   negative range, where the "first" EID in the range (provided in the
   SWIMA Request) is greater than the "last" EID in the range (this
   being the EID of the last recorded event on the SWIMA-PC).
   Implementers need to ensure that SWIMA-PCs do not experience problems
   in such a circumstance.

   Note that this specification only supports the returning of partial
   results when returning event records.  There is no way to return a
   partial inventory list under this specification.

3.7.6.  Synchronizing Event Identifiers and Epochs

   Since EIDs are sequential within an Epoch, if a SWIMA-PV's list of
   event records contains gaps in the EID values within a single Epoch,
   the SWIMA-PV knows that there are events that it has not accounted
   for.  The SWIMA-PV can request either (1) a new event list to collect
   the missing events or (2) a full inventory to resync its
   understanding of the state of the endpoint's Software Inventory
   Evidence Collection.  In either case, after the SWIMA-PV's record of
   the endpoint's Software Inventory Evidence Collection has been
   updated, the SWIMA-PV can record the new latest EID value and track
   events normally from that point on.

   If the SWIMA-PV receives any attribute from a SWIMA-PC where the EID
   Epoch differs from the EID Epoch that was used previously, then the
   SWIMA-PV or any entity using this information to track the endpoint's
   Software Inventory Evidence Collection knows that there is a
   discontinuity in its understanding of the endpoint's state.  To move
   past this discontinuity and reestablish a current understanding of
   the state of the endpoint's Software Inventory Evidence Collection,
   the SWIMA-PV needs to receive a full inventory from the endpoint.
   The SWIMA-PV cannot be brought in sync with the endpoint's state
   through the collection of any set of event records in this situation.
   This is because it is not possible to account for all events on the
   SWIMA-PC since the previous Epoch was used: there is no way to query
   for EIDs from a previous Epoch.  Once the SWIMA-PV has received a
   full inventory for the new Epoch, the SWIMA-PV records the latest EID
   reported in this new Epoch and can track further events normally.

   A SWIMA-PC MUST NOT report events with EIDs from any Epoch other than
   the current EID Epoch.  The SWIMA-PC MAY choose to purge all event
   records from a previous Epoch from memory after an Epoch change.
   Alternately, the SWIMA-PC MAY choose to retain some event records



Schmidt, et al.              Standards Track                   [Page 32]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   from a previous EID Epoch and assign them new EIDs in the current
   Epoch.  However, in the case where a SWIMA-PC chooses the latter
   option it MUST ensure that the order of events according to their
   EIDs is unchanged and that there is no coverage gap between the first
   retained event recorded during the previous Epoch (now reassigned
   with an EID in the current Epoch) and the first event recorded during
   the current Epoch.  In particular, the SWIMA-PC MUST ensure that all
   change events that occurred after the last recorded event from the
   previous Epoch are known and recorded.  (This might not be possible
   if the Epoch change is due to state corruption on the SWIMA-PC.)  A
   SWIMA-PC might choose to reassign EIDs to records from a preceding
   Epoch to create a "sliding window" of events, where each Epoch change
   represents a shift in the window of available events.

   In the case where a SWIMA-PC suffers a crash and loses track of its
   current EID Epoch or current EID, then it MUST generate a new EID
   Epoch value and begin assigning EIDs within that Epoch.  In this
   case, the SWIMA-PC MUST purge all event records from before the
   crash, as it cannot ensure that there is not a gap between the last
   of those records and the next detected event.  The process for
   generating a new EID Epoch MUST minimize the possibility that the
   newly generated EID Epoch is the same as a previously used EID Epoch.

   The SWIMA-PV will normally never receive an attribute indicating that
   the latest EID is less than the latest EID reported in a previous
   attribute within the same EID Epoch.  If this occurs, the SWIMA-PC
   has suffered an error of some kind, possibly indicative of at least
   partial corruption of its event log.  In this case, the SWIMA-PV MUST
   treat the situation as if there was a change in Epoch and treat any
   local copy of the endpoint's Software Inventory Evidence Collection
   as being out of sync until a full inventory can be reported by the
   SWIMA-PC.  The SWIMA-PV SHOULD log the occurrence so the SWIMA-PC can
   be examined to ensure that it is now operating properly.

3.8.  Subscriptions

   Thus far, all attribute exchanges discussed assume that a SWIMA-PV
   sent a SWIMA Request attribute and the SWIMA-PC is providing a direct
   response to that request.  SWIMA also supports the ability of a
   SWIMA-PC to send a SWIMA Response to the SWIMA-PV in response to
   observed changes in the endpoint's Software Inventory Evidence
   Collection, instead of in direct response to a SWIMA Request.  An
   agreement by a SWIMA-PC to send content when certain changes to the
   endpoint's Software Inventory Evidence Collection are detected is
   referred to in this specification as a "subscription", and the
   SWIMA-PV that receives this content is said to be "subscribed to" the
   given SWIMA-PC.  All SWIMA-PCs and SWIMA-PVs MUST support the use of
   subscriptions.



Schmidt, et al.              Standards Track                   [Page 33]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


3.8.1.  Establishing Subscriptions

   A SWIMA-PV establishes a subscription on a particular SWIMA-PC by
   sending a SWIMA Request attribute with the Subscribe flag set.  The
   SWIMA Request attribute is otherwise identical to the SWIMA Requests
   discussed in previous sections.  Specifically, such a SWIMA Request
   might or might not request the inclusion of Software Inventory
   Evidence Records, might or might not be targeted, and might request
   change event records or endpoint inventory.  Assuming that no error
   is encountered, a SWIMA-PC MUST send a SWIMA Response attribute in
   direct response to this SWIMA Request attribute, just as if the
   Subscribe flag was not set.  As such, the attribute exchange that
   establishes a new subscription in a SWIMA-PC has the same flow as the
   flow seen in the previous attribute exchanges, as depicted in
   Figure 2.  If the SWIMA-PV does not receive a PA-TNC Error attribute
   (as described in Sections 3.9 and 5.15) in response to its
   subscription request, the subscription has been successfully
   established on the SWIMA-PC.  The SWIMA Request attribute that
   establishes a new subscription is referred to as the "establishing
   request" for that subscription.

   When a subscription is established, it is assigned a Subscription ID
   value.  The Subscription ID is equal to the value of the Request ID
   of the establishing request.  (For more about Request IDs, see
   Section 5.5.)

   A SWIMA-PC MUST have the ability to record and support at least 8
   simultaneous subscriptions and SHOULD have the ability to support
   more than this.  These subscriptions might all come from a single
   SWIMA-PV, might all be from different SWIMA-PVs (residing on the same
   or different NEA Servers), or might be a mix.  In the case that a
   SWIMA-PC receives a subscription request but is unable to support an
   additional subscription, it MUST respond to the request with a PA-TNC
   Error attribute with error code SWIMA_SUBSCRIPTION_DENIED_ERROR.

   A SWIMA-PV MUST have the ability to record and support at least 256
   simultaneous subscriptions and SHOULD have the ability to support
   more than this.  Any number of these subscriptions might be to the
   same SWIMA-PC, and any number of these subscriptions might be to
   different SWIMA-PCs.  In the latter case, some of these SWIMA-PCs
   might share a single endpoint, while others might be on different
   endpoints.









Schmidt, et al.              Standards Track                   [Page 34]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


3.8.2.  Managing Subscriptions

   The SWIMA-PC MUST record each accepted subscription along with the
   identity of the party to whom attributes are to be pushed.  This
   identity includes two parts:

   o  An identifier for the PB-TNC session between the Posture Broker
      Server on a NEA Server and the Posture Broker Client on the
      endpoint.  This identifier is called the "Connection ID"

   o  The Posture Validator Identifier for the SWIMA-PV that made the
      subscription request

   The Posture Validator Identifier is provided in the field of the same
   name in the PB-PA message that encapsulates the subscription request
   attribute (Section 4.5 of [RFC5793]), and this information is passed
   along to NEA Posture Collectors (Section 3.3 of [RFC5792]).  The
   Connection ID is a value local to a particular endpoint's Posture
   Broker Client that identifies an ongoing session between a specific
   Posture Broker Client and a specific Posture Broker Server.  Posture
   Broker Clients and Posture Broker Servers need to be capable of
   supporting multiple simultaneous sessions, so they already need a way
   to locally distinguish each ongoing session.  (See Section 3.1 of
   [RFC5793].)  A Posture Broker Client needs to assign each session at
   a given time its own Connection ID that lasts for the life of that
   session.  Connection IDs only need to be unique among the Connection
   IDs of simultaneously occurring sessions on that endpoint.  This
   Connection ID needs to be exposed to the SWIMA-PC, and the SWIMA-PC
   needs to be informed when the Connection ID is unbound due to the
   closure of that connection.

   Likewise, SWIMA-PVs MUST record each accepted subscription for which
   they are the subscribing party, including the parameters of the
   establishing request, along with the associated Subscription ID and
   the identity of the SWIMA-PC that will be fulfilling the
   subscription.  The SWIMA-PV needs to retain this information in order
   to correctly interpret pushed SWIMA Response attributes sent in
   fulfillment of the subscription.  The identity of the SWIMA-PC is
   given in the Posture Collector Identifier [RFC5793] of the PB-PA
   message header in all messages from that SWIMA-PC.  The SWIMA-PV has
   no need to record the associated connection ID of the subscription as
   the SWIMA-PV is only receiving, not sending, attributes once a
   subscription is established.








Schmidt, et al.              Standards Track                   [Page 35]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


3.8.3.  Terminating Subscriptions

   Subscriptions MAY be terminated at any time by the subscribing
   SWIMA-PV by setting the Clear Subscriptions flag in a SWIMA Request.
   (See Section 5.6 for more on using this flag.)  In the case that a
   SWIMA Request with the Clear Subscriptions flag set is received, the
   SWIMA-PC MUST only clear subscriptions that match both the NEA
   Server's Connection ID and the SWIMA-PV's Posture Validator
   Identifier for this SWIMA Request and MUST clear all such
   subscriptions.

   This specification does not give the SWIMA-PV the ability to
   terminate subscriptions individually -- all subscriptions to the
   SWIMA-PV are cleared when the Clear Subscriptions flag is set.

   This specification does not give the SWIMA-PC the ability to
   unilaterally terminate a subscription.  However, if the SWIMA-PC
   experiences a fatal error while fulfilling a subscription, resulting
   in sending a PA-TNC Error attribute with error code
   SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR, then the subscription whose
   fulfillment led to the error MUST be treated as terminated by both
   the SWIMA-PC and the SWIMA-PV.  Only the subscription experiencing
   the error is cancelled; other subscriptions are unaffected.  See
   Section 3.9 for more on this error condition.

   Finally, a subscription is terminated if the connection between the
   SWIMA-PC and SWIMA-PV is closed.  This occurs when the Connection ID
   used in the messages between the SWIMA-PC and the SWIMA-PV becomes
   unbound.  Loss of this Connection ID would prevent the SWIMA-PC from
   sending messages in fulfillment of this subscription.  As such, loss
   of the Connection ID necessarily forces subscription termination
   between the affected parties.

3.8.4.  Subscription Status

   A SWIMA-PV can request that a SWIMA-PC report the list of active
   subscriptions for which the SWIMA-PV is the subscriber.  A SWIMA-PV
   can use this capability to recover lost information about active
   subscriptions.  A SWIMA-PV can also use this capability to verify
   that a SWIMA-PC has not forgotten any of its subscriptions.  The
   latter is especially useful in cases where a SWIMA-PC does not send
   any attributes in fulfillment of a given subscription for a long
   period of time.  The SWIMA-PV can check the list of active
   subscriptions on the SWIMA-PC and verify whether the inactivity is
   due to (1) a lack of reportable events or (2) the SWIMA-PC forgetting
   its obligations to fulfill a given subscription.





Schmidt, et al.              Standards Track                   [Page 36]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   A SWIMA-PV requests a list of its subscriptions on a given SWIMA-PC
   by sending that SWIMA-PC a Subscription Status Request.  The SWIMA-PC
   MUST then respond with a Subscription Status Response (or a PA-TNC
   Error if an error condition is experienced).  The Subscription Status
   Response MUST contain one subscription record for each of the active
   subscriptions for which the SWIMA-PV is the subscribing party.

3.8.5.  Fulfilling Subscriptions

   As noted in Section 3.6, SWIMA-PCs are required to automatically
   detect changes to an endpoint's Software Inventory Evidence
   Collection in near real time.  For every active subscription, the
   SWIMA-PC MUST send an attribute to the subscribed SWIMA-PV whenever a
   change to relevant records is detected within the endpoint's Software
   Inventory Evidence Collection.  Such an attribute is said to be sent
   "in fulfillment of" the given subscription, and any such attribute
   MUST include that subscription's Subscription ID.  If the
   establishing request for that subscription was a targeted request,
   then only records that match the Software Identifiers provided in
   that establishing request are considered relevant.  Otherwise (i.e.,
   for non-targeted requests), any record is considered relevant for
   this purpose.  Figure 3 shows a sample attribute exchange where a
   subscription is established and then attributes are sent from the
   SWIMA-PC in fulfillment of the established subscription.

            +-------------+                    +--------------+
            |  SWIMA-PC   |                    |   SWIMA-PV   |  Time
            +-------------+                    +--------------+   |
                  |                                   |           |
                  |<----------SWIMA Request-----------|           |
                  |                                   |           |
                  |-----------SWIMA Response--------->|           |
                  |                                   |           |
                  .                                   .           .
                  .                                   .           .
                  .                                   .           .
    <Change Event>|                                   |           |
                  |----------SWIMA Response---------->|           |
                  |                                   |           |
                  .                                   .           .
                  .                                   .           .
                  .                                   .           .
    <Change Event>|                                   |           |
                  |----------SWIMA Response---------->|           |
                  |                                   |           V

           Figure 3: Subscription Establishment and Fulfillment




Schmidt, et al.              Standards Track                   [Page 37]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   The contents of an attribute sent in fulfillment of a subscription
   depend on the parameters provided in the establishing request for
   that subscription.  Specifically, the attribute sent in fulfillment
   of a subscription has the same attribute type as would a direct
   response to the establishing request.  For example, if the
   establishing request stipulated a response that contained an event
   record list that included Software Inventory Evidence Records, all
   attributes sent in fulfillment of this subscription will also consist
   of event record lists with Software Inventory Evidence Records.  As
   such, all SWIMA Responses displayed in the exchange depicted in
   Figure 3 are the same attribute type.  A SWIMA Response generated in
   fulfillment of an active subscription MUST be a valid SWIMA Response
   attribute according to all the rules outlined in the preceding
   sections.  In other words, an attribute constructed in fulfillment of
   a subscription will look the same as an attribute sent in direct
   response to an explicit request from a SWIMA-PV that had the same
   request parameters and that arrived immediately after the given
   change event.  There are a few special rules that expand on this
   guideline, as discussed in Sections 3.8.5.1 through 3.8.5.5.

3.8.5.1.  Subscriptions That Report Inventories

   In the case that a SWIMA-PV subscribes to a SWIMA-PC and requests an
   inventory attribute whenever changes are detected (i.e., the EID in
   the establishing request is 0), then the SWIMA-PC MUST send the
   requested inventory whenever a relevant change is detected.  (A
   "relevant change" is any change for non-targeted requests or a change
   to an indicated record in a targeted request.)  Upon detection of a
   relevant change for an active subscription, the SWIMA-PC sends the
   appropriate inventory information as if it had just received the
   establishing request.  Inventory attributes sent in fulfillment of
   this subscription will probably have a large amount of redundancy, as
   the same records are likely to be present in each of these SWIMA
   attributes.  The role of an inventory subscription is not to report
   records just for the items that changed -- that is the role of a
   subscription that reports events (see Section 3.8.5.2).  A SWIMA-PC
   MUST NOT exclude a record from an attribute sent in fulfillment of an
   inventory subscription simply because that record was not involved in
   the triggering event (although a record might be excluded for other
   reasons, such as if the subscription is targeted; see
   Section 3.8.5.3).

3.8.5.2.  Subscriptions That Report Events

   A SWIMA-PV indicates that it wishes to establish a subscription
   requesting event records by providing a non-zero EID in the SWIMA
   Request establishing the subscription (see Section 3.7.1).  However,
   when the SWIMA-PC constructs an attribute in fulfillment of the



Schmidt, et al.              Standards Track                   [Page 38]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   subscription (other than the direct response to the establishing
   request), it MUST only include event records for the detected
   change(s) that precipitated this response attribute.  In other words,
   it MUST NOT send a complete list of all changes starting with the
   establishing request's EID, up through the latest change, every time
   a new event is detected.  In effect, the EID in the establishing
   request is treated as being updated every time an attribute is sent
   in fulfillment of this subscription, such that a single event is not
   reported twice in fulfillment of a single subscription.  As such,
   every SWIMA-PC MUST track the EID of the last event that triggered an
   attribute for the given subscription.  When the next event (or set of
   events) is detected, the SWIMA-PC MUST only report events with EIDs
   after the last reported event.  In the case that the EID Epoch of the
   SWIMA-PC changes, the SWIMA-PC MUST reset this EID tracker to zero
   (if the event log is completely purged) or to the new EID of the last
   reported retained event (if the event log is partially purged to
   create a "sliding window").  Doing this ensures that the SWIMA-PC
   continues to only send events that have not been previously reported.

   Note that while a subscription is active, the subscribing SWIMA-PV
   MAY make other requests for event records that overlap with events
   that are reported in fulfillment of a subscription.  Such requests
   are not affected by the presence of the subscription, nor is the
   subscription affected by such requests.  In other words, a given
   request will get the same results back whether or not there was a
   subscription.  Likewise, an attribute sent in fulfillment of a
   subscription will contain the same information whether or not other
   requests had been received from the SWIMA-PV.

   A SWIMA-PV needs to pay attention to the EID Epoch in these
   attributes, as changes in the Epoch might create discontinuities in
   the SWIMA-PV's understanding of the endpoint's Software Inventory
   Evidence Collection state, as discussed in Section 3.7.6.  In
   particular, once the EID Epoch changes, a SWIMA-PV is unable to have
   confidence that it has a correct understanding of the state of an
   endpoint's Software Inventory Evidence Collection until after the
   SWIMA-PV collects a complete inventory.

   SWIMA-PCs MAY send partial lists of event records in fulfillment of a
   subscription.  (See Section 3.7.5 for more on partial lists of event
   records.)  In the case that a SWIMA-PC sends a partial list of event
   records in fulfillment of a subscription, it MUST immediately send
   the next consecutive partial list and continue doing so until it has
   sent the equivalent of the complete list of event records.  In other
   words, if the SWIMA-PC sends a partial list, it does not wait for
   another change event to send another SWIMA Response; rather, it
   continues sending SWIMA Responses until it has sent all event records
   that would have been included in a complete fulfillment of the



Schmidt, et al.              Standards Track                   [Page 39]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   subscription.  Note that the direct response to the establishing
   request is not considered to be sent in fulfillment of a
   subscription.  However, in this case the SWIMA-PC MUST treat the
   presence of unreported events as a triggering event for pushing
   additional messages in fulfillment of the newly established
   subscription.  As such, the net effect is that if the direct response
   to the establishing request (i.e., the Subscription Fulfillment flag
   is unset) is partial, the SWIMA-PC will immediately follow this with
   additional attributes (with the Subscription Fulfillment flag set)
   until the complete set of events has been sent to the SWIMA-PV.

3.8.5.3.  Targeted Subscriptions

   Subscriptions MAY be targeted to only apply to records that match a
   given set of Software Identifiers.  In the case where changes that
   affect multiple records are detected -- some matching the
   establishing request's Software Identifiers and some not -- the
   attribute sent in fulfillment of the subscription MUST only include
   inventory or events (as appropriate) for records that match the
   establishing request's Software Identifiers.  The SWIMA-PC MUST NOT
   include non-matching records in the attribute, even if those
   non-matching records experienced change events that were simultaneous
   with change events on the matching records.

   In addition, a SWIMA-PC MUST send an attribute in fulfillment of a
   targeted subscription only when changes to the endpoint's Software
   Inventory Evidence Collection impact one or more records matching the
   subscription's establishing request's Software Identifiers.  A
   SWIMA-PC MUST NOT send any attribute in fulfillment of a targeted
   subscription based on detected changes to the endpoint's Software
   Inventory Evidence Collection that did not involve any of the records
   targeted by that subscription.

3.8.5.4.  No Subscription Consolidation

   A SWIMA-PV MAY establish multiple subscriptions to a given SWIMA-PC.
   If this is the case, it is possible that a single change event on the
   endpoint might require fulfillment by multiple subscriptions and that
   the information included in attributes that fulfill each of these
   subscriptions might overlap.  The SWIMA-PC MUST send separate
   attributes for each established subscription that requires a response
   due to the given event.  Each of these attributes MUST contain all
   information required to fulfill that individual subscription, even if
   that information is also sent in other attributes sent in fulfillment
   of other subscriptions at the same time.  In other words, SWIMA-PCs
   MUST NOT attempt to combine information when fulfilling multiple
   subscriptions simultaneously, even if this results in some redundancy
   in the attributes sent to the SWIMA-PV.



Schmidt, et al.              Standards Track                   [Page 40]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


3.8.5.5.  Delayed Subscription Fulfillment

   A SWIMA-PC MAY delay the fulfillment of a subscription following a
   change event in the interest of waiting to see if additional change
   events are forthcoming and, if so, conveying the relevant records
   back to the SWIMA-PV in a single SWIMA Response attribute.  This can
   help reduce network bandwidth consumption between the SWIMA-PC and
   the SWIMA-PV.  For example, consider a situation where 10 changes
   occur a tenth of a second apart.  If the SWIMA-PC does not delay in
   assembling and sending SWIMA Response attributes, the SWIMA-PV will
   receive 10 separate SWIMA Response attributes over a period of
   1 second.  However, if the SWIMA-PC waits half a second after the
   initial event before assembling a SWIMA Response, the SWIMA-PV only
   receives two SWIMA Response attributes over the same period of time.

   Note that the ability to consolidate events for a single subscription
   over a given period of time does not contradict the rules in
   Section 3.8.5.4 prohibiting consolidation across multiple
   subscriptions.  When delaying fulfillment of subscriptions, SWIMA-PCs
   are still required to fulfill each individual subscription
   separately.  Moreover, in the case that change events within the
   delay window cancel each other out (e.g., a record is deleted and
   then re-added), the SWIMA-PC MUST still report each change event,
   rather than just report the net effect of changes over the delay
   period.  In other words, delayed fulfillment can decrease the number
   of attributes sent by the SWIMA-PC, but it does not reduce the total
   number of change events reported.

   SWIMA-PCs are not required to support delayed fulfillment of
   subscriptions.  However, in the case that the SWIMA-PC does support
   delayed subscription fulfillment, it MUST be possible to configure
   the SWIMA-PC to disable delayed fulfillment.  In other words, parties
   deploying SWIMA-PCs need to be allowed to disable delayed
   subscription fulfillment in their SWIMA-PCs.  The manner in which
   such configuration occurs is left to the discretion of implementers,
   although implementers MUST protect the configuration procedure from
   unauthorized tampering.  In other words, there needs to be some
   assurance that unauthorized individuals are not able to introduce
   long delays in subscription fulfillment.

3.9.  Error Handling

   In the case where the SWIMA-PC detects an error in a SWIMA Request
   attribute that it receives, it MUST respond with a PA-TNC Error
   attribute with an error code appropriate to the nature of the error.
   (See Section 4.2.8 of PA-TNC [RFC5792] for more details about PA-TNC
   Error attributes and error codes, and see Section 5.15 in this
   specification for error codes specific to SWIMA attributes.)  In the



Schmidt, et al.              Standards Track                   [Page 41]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   case that an error is detected in a SWIMA Request, the SWIMA-PC
   MUST NOT take any action requested by this SWIMA Request, even if
   partial completion of the request is possible.  In other words, a
   SWIMA Request that contains an error will be completely ignored by
   the SWIMA-PC (beyond sending a PA-TNC Error attribute and possibly
   logging the error locally); no attempt at partial completion of the
   request will be made.

   In the case where the SWIMA-PC receives a valid SWIMA Request
   attribute but experiences an error during the process of responding
   to that attribute's instructions where that error prevents the
   SWIMA-PC from properly or completely fulfilling that request, the
   SWIMA-PC MUST send a PA-TNC Error attribute with an error code
   appropriate to the nature of the error.  In the case where a PA-TNC
   Error attribute is sent, the SWIMA-PC MUST NOT take any of the
   actions requested by the SWIMA Request attribute that led to the
   detected error.  This is the case even if some actions could have
   been completed successfully and might even require the SWIMA-PC to
   reverse some successful actions already taken before the error
   condition was detected.  In other words, either (1) all aspects of a
   SWIMA Request complete fully and successfully (in which case the
   SWIMA-PC sends a SWIMA Response attribute) or (2) no aspects of the
   SWIMA Request occur (in which case the SWIMA-PC sends a PA-TNC Error
   attribute).  In the case that a SWIMA-PC sends a PA-TNC Error
   attribute in response to a SWIMA Request, then the SWIMA-PC MUST NOT
   also send any SWIMA Response attribute in response to the same SWIMA
   Request.  For this reason, the sending of a SWIMA Response attribute
   MUST be the last action taken by a SWIMA-PC in response to a SWIMA
   Request, to avoid the possibility of a processing error occurring
   after that SWIMA Response attribute is sent.

   In the case that the SWIMA-PC detects an error that prevents it from
   properly or completely fulfilling its obligations under an active
   subscription, the SWIMA-PC MUST send a PA-TNC Error attribute with
   error code SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR to the SWIMA-PV that
   established this subscription.  This type of PA-TNC Error attribute
   identifies the specific subscription that cannot be adequately
   honored due to the error condition and also identifies an error
   "subtype".  The error subtype indicates the error code of the error
   condition the SWIMA-PC experienced that prevented it from honoring
   the given subscription.  In the case that the error condition cannot
   be identified or does not align with any of the defined error codes,
   the SWIMA_ERROR error code SHOULD be used in the subtype.  In the
   case that a SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR is sent, the
   associated subscription MUST be treated as cancelled by both the
   SWIMA-PC and the SWIMA-PV.





Schmidt, et al.              Standards Track                   [Page 42]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   The SWIMA-PV MUST NOT send any PA-TNC Error attributes to SWIMA-PCs.
   In the case that a SWIMA-PV detects an error condition, it SHOULD log
   this error, but the SWIMA-PV does not inform any SWIMA-PCs of this
   event.  Errors might include, but are not limited to, the detection
   of malformed SWIMA Response attributes sent from a given SWIMA-PC, as
   well as the detection of error conditions when the SWIMA-PV processes
   SWIMA Responses.

   Both SWIMA-PCs and SWIMA-PVs SHOULD log errors so that administrators
   can trace the causes of errors.  Log entries SHOULD include the code
   of the error, the time it was detected, and additional descriptive
   information to aid in understanding the nature and cause of the
   error.  Logs are an important debugging tool, and implementers are
   strongly advised to include comprehensive logging capabilities in
   their products.

4.  Protocol

   The SWIMA protocol supports two different types of message exchanges
   for conveying software inventory information.  These message
   exchanges are described in the following subsections, along with
   implementation requirements for supporting them.

   The SWIMA protocol also supports two simple status exchanges: a
   Subscription Status exchange for conveying information about active
   subscriptions, and a Source Metadata exchange for conveying
   information about a SWIMA-PC's data sources.  In both cases, a
   SWIMA-PV sends a request attribute (Subscription Status Request or
   Source Metadata Request, respectively) and a SWIMA-PC responds with a
   matching response attribute (Subscription Status Response or Source
   Metadata Response, respectively).  As these exchanges are
   straightforward, no additional information on the exchanges is
   provided.


















Schmidt, et al.              Standards Track                   [Page 43]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


4.1.  Direct Response to a SWIMA Request

   The first type of software information exchange is used to provide
   the SWIMA-PV with a software inventory or event collection from the
   queried endpoint.

       +-------------+                      +--------------+
       |  SWIMA-PC   |                      |   SWIMA-PV   |  Time
       +-------------+                      +--------------+   |
             |                                     |           |
             |<-----------SWIMA Request------------|           |
             |                                     |           |
             |           SWIMA Response*           |           |
             |-----------------or----------------->|           |
             |             PA-TNC Error            |           |
             |                                     |           V

     *SWIMA Response is one of the following: Software Identifier
      Inventory, Software Identifier Events, Software Inventory,
      or Software Events.

   Figure 4: SWIMA Attribute Exchange (Direct Response to SWIMA Request)

   In this exchange, the SWIMA-PV indicates to the SWIMA-PC, via a SWIMA
   Request, the nature of the information it wishes to receive
   (inventory vs. events, full or targeted) and how it wishes the
   returned inventory to be expressed (with or without Software
   Inventory Evidence Records).  The SWIMA-PC responds with the
   requested information using the appropriate attribute type.  A single
   SWIMA Request MUST only lead to a single SWIMA Response or PA-TNC
   Error that is in direct response to that request.




















Schmidt, et al.              Standards Track                   [Page 44]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


4.2.  Subscription-Based Response

   The second type of software information exchange allows change-event-
   based reporting based on a subscription.  If there is an active
   subscription on the endpoint, the SWIMA-PC sends a SWIMA Response to
   the SWIMA-PV following a change event on the endpoint in fulfillment
   of that subscription.  Such an exchange is shown in Figure 5.

            +-------------+                +--------------+
            |  SWIMA-PC   |                |   SWIMA-PV   |  Time
            +-------------+                +--------------+   |
                  |                               |           |
    <Change Event>|                               |           |
                  |------SWIMA Response(s)*------>|           |
                  |                               |           |
                  |                               |           V

     *SWIMA Response is one of the following: Software Identifier
      Inventory, Software Identifier Events, Software Inventory,
      or Software Events.

         Figure 5: SWIMA Attribute Exchange (in Fulfillment of an
                           Active Subscription)

   Note that unlike direct responses to a SWIMA Request, a single change
   event can precipitate multiple SWIMA Responses for a single
   subscription, but only if all but the last of those SWIMA Responses
   convey partial lists of event records.  When providing multiple SWIMA
   Responses in this way, the initial responses contain partial lists of
   event records and the last of those SWIMA Responses conveys the
   remainder of the relevant event records, completing the delivery of
   all relevant events in response to the change event.  A single change
   event MUST NOT otherwise be followed by multiple SWIMA Responses or
   PA-TNC Error attributes in any combination.

4.3.  Required Exchanges

   All SWIMA-PVs and SWIMA-PCs MUST support both types of software
   information exchanges.  In particular, SWIMA-PCs MUST be capable of
   pushing a SWIMA Response to a SWIMA-PV immediately upon detection of
   a change to the endpoint's Software Inventory Evidence Collection in
   fulfillment of established SWIMA-PV subscriptions, as described in
   Section 3.8.

   All SWIMA-PCs MUST support both status exchanges (Subscription Status
   and Source Metadata); SWIMA-PVs are recommended to support these
   status exchanges, but doing so is not required.




Schmidt, et al.              Standards Track                   [Page 45]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


5.  Software Inventory Messages and Attributes

   This section describes the format and semantics of the SWIMA
   protocol.  This protocol uses the PA-TNC message header format
   [RFC5792].

5.1.  PA Subtype (aka PA-TNC Component Type)

   The NEA PB-TNC [RFC5793] interface provides a general
   message-batching protocol capable of carrying one or more PA-TNC
   messages between the Posture Broker Client and Posture Broker Server.
   When PB-TNC is carrying a PA-TNC message, the PB-TNC message headers
   contain a 32-bit identifier called the "PA Subtype".  The PA Subtype
   field indicates the type of component associated with all of the
   PA-TNC attributes carried by the PB-TNC message.  The core set of
   PA Subtypes is defined in the PA-TNC specification.  This
   specification defines a new "SWIMA Attributes" PA Subtype, which is
   registered in Section 10.2 of this document and is used as a
   namespace for the collection of SWIMA attributes defined in this
   document.

   For more information on PB-TNC messages and PA-TNC messages, as well
   as their message headers, see the PB-TNC [RFC5793] and PA-TNC
   [RFC5792] specifications, respectively.

5.2.  SWIMA Attribute Overview

   Each PA-TNC attribute described in this specification is intended to
   be sent between the SWIMA-PC and SWIMA-PV and so will be carried in a
   PB-TNC message indicating a PA Subtype of "SWIMA Attributes".  PB-TNC
   messages MUST always include the SWIMA Attributes Subtype defined in
   Section 5.1 when carrying SWIMA attributes over PA-TNC.  The
   attributes defined in this specification appear below, along with a
   short summary of their purposes.

   PA-TNC attribute types are identified in the PA-TNC Attribute Header
   via the PA-TNC Attribute Vendor ID field and the PA-TNC Attribute
   Type field; see Section 4.1 of [RFC5792] for details.  Table 1
   identifies the appropriate values for these fields for each attribute
   type used within the SWIMA protocol.  All attributes have a PEN value
   of 0x000000.  Both the hexadecimal and decimal values are provided in
   the Integer column in the table.  Each attribute is described in
   greater detail in subsequent sections (identified in the table's
   Description column).







Schmidt, et al.              Standards Track                   [Page 46]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   +--------------+-----------------+----------------------------------+
   | Attribute    | Integer         | Description                      |
   | Name         |                 |                                  |
   +--------------+-----------------+----------------------------------+
   | SWIMA        | 0x0000000D (13) | Request sent from a SWIMA-PV to  |
   | Request      |                 | a SWIMA-PC for the SWIMA-PC to   |
   |              |                 | provide a software inventory or  |
   |              |                 | event list.  It might also       |
   |              |                 | establish a subscription.        |
   |              |                 | (Section 5.6)                    |
   |              |                 |                                  |
   | Software     | 0x0000000E (14) | An inventory sent without        |
   | Identifier   |                 | Software Inventory Evidence      |
   | Inventory    |                 | Records sent from a SWIMA-PC.    |
   |              |                 | (Section 5.7)                    |
   |              |                 |                                  |
   | Software     | 0x0000000F (15) | A collection of events impacting |
   | Identifier   |                 | the endpoint's Software          |
   | Events       |                 | Inventory Evidence Collection,   |
   |              |                 | where events do not include      |
   |              |                 | Software Inventory Evidence      |
   |              |                 | Records.  (Section 5.8)          |
   |              |                 |                                  |
   | Software     | 0x00000010 (16) | An inventory including Software  |
   | Inventory    |                 | Inventory Evidence Records sent  |
   |              |                 | from a SWIMA-PC.  (Section 5.9)  |
   |              |                 |                                  |
   | Software     | 0x00000011 (17) | A collection of events impacting |
   | Events       |                 | the endpoint's Software          |
   |              |                 | Inventory Evidence Collection,   |
   |              |                 | where events include Software    |
   |              |                 | Inventory Evidence Records.      |
   |              |                 | (Section 5.10)                   |
   |              |                 |                                  |
   | Subscription | 0x00000012 (18) | A request for a list of a        |
   | Status       |                 | SWIMA-PV's active subscriptions  |
   | Request      |                 | on a SWIMA-PC.  (Section 5.11)   |
   |              |                 |                                  |
   | Subscription | 0x00000013 (19) | A list of a SWIMA-PV's active    |
   | Status       |                 | subscriptions on a SWIMA-PC.     |
   | Response     |                 | (Section 5.12)                   |
   |              |                 |                                  |
   | Source       | 0x00000014 (20) | A request for information about  |
   | Metadata     |                 | a SWIMA-PC's data sources.       |
   | Request      |                 | (Section 5.13)                   |
   |              |                 |                                  |





Schmidt, et al.              Standards Track                   [Page 47]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   | Source       | 0x00000015 (21) | Descriptive metadata about a     |
   | Metadata     |                 | SWIMA-PC's data sources.         |
   | Response     |                 | (Section 5.14)                   |
   |              |                 |                                  |
   | PA-TNC Error | 0x00000008 (8)  | An error attribute as defined in |
   |              |                 | the PA-TNC specification         |
   |              |                 | [RFC5792].                       |
   +--------------+-----------------+----------------------------------+

                   Table 1: SWIMA Attribute Enumeration

   Because one of the Software Identifier Inventory, Software Identifier
   Events, Software Inventory, or Software Events attributes is expected
   to be sent to a SWIMA-PV in direct response to a SWIMA Request
   attribute or in fulfillment of an active subscription, those four
   attribute types are referred to collectively in this document as
   "SWIMA Response attributes".

   All SWIMA-PVs MUST be capable of sending SWIMA Request attributes and
   be capable of receiving and processing all SWIMA Response attributes
   as well as PA-TNC Error attributes.  All SWIMA-PCs MUST be capable of
   receiving and processing SWIMA Request attributes and be capable of
   sending all types of SWIMA Response attributes as well as PA-TNC
   Error attributes.  SWIMA-PVs MUST ignore any SWIMA Request attributes
   that they receive.  SWIMA-PCs MUST ignore any SWIMA Response
   attributes or PA-TNC Error attributes that they receive.

5.3.  Message Diagram Syntax

   This specification uses diagrams to define the syntax of new PA-TNC
   messages and attributes.  Each diagram depicts the format and size of
   each field in bits.  Implementations MUST send the bits depicted in
   each diagram as they are shown from left to right for each 32-bit
   quantity, "traversing" the diagram from top to bottom.  Fields
   representing numeric values MUST be sent in network (big endian) byte
   order.

   Descriptions of bit field (e.g., flag) values refer to the position
   of the bit within the field.  These bit positions are numbered from
   the most significant bit through the least significant bit.  As such,
   an octet with only bit 0 set would have a value of 0x80 (1000 0000),
   an octet with only bit 1 set would have a value of 0x40 (0100 0000),
   and an octet with only bit 7 set would have a value of 0x01
   (0000 0001).







Schmidt, et al.              Standards Track                   [Page 48]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


5.4.  Normalization of Text Encoding

   In order to ensure consistency of transmitted attributes, some fields
   require normalization of their format.  When this is necessary, this
   information is indicated in the field's description.  In such cases,
   the field contents MUST be normalized to Network Unicode format as
   defined in RFC 5198 [RFC5198].  Network Unicode format defines a
   refinement of UTF-8 [RFC3629] that ensures a normalized expression of
   characters.  SWIMA-PCs and SWIMA-PVs MUST NOT perform conversion and
   normalization on any field values except those specifically
   identified in the following sections as requiring normalization.
   Note, however, that some data models require additional normalization
   before source information is added to an endpoint's Software
   Inventory Evidence Collection as a record.  The references from the
   "Software Data Model Types" registry (see Section 10.5) will note
   where this is necessary.

5.5.  Request IDs

   All SWIMA Request attributes MUST include a Request ID value.  The
   Request ID field provides a value that identifies a given request
   relative to other requests between a SWIMA-PV and the receiving
   SWIMA-PC.  Specifically, the SWIMA-PV assigns each SWIMA Request
   attribute a Request ID value that is intended to be unique within the
   lifetime of a given network Connection ID.

   In the case that a SWIMA Request requests the establishment of a
   subscription and the receiving SWIMA-PC agrees to that subscription,
   the Request ID of that SWIMA Request (i.e., the establishing request
   of the subscription) becomes that subscription's Subscription ID.
   All attributes sent in fulfillment of this subscription include a
   flag indicating that the attribute fulfills a subscription and the
   subscription's Subscription ID.  A SWIMA-PV MUST NOT reuse a Request
   ID value in communications with a given SWIMA-PC while that Request
   ID is also serving as a Subscription ID for an active subscription
   with that SWIMA-PC.  In the case where a SWIMA-PC receives a SWIMA
   Request from a given SWIMA-PV where that Request ID is also the
   Subscription ID of an active subscription with that SWIMA-PV, the
   SWIMA-PC MUST respond with a PA-TNC Error attribute with an error
   code of SWIMA_SUBSCRIPTION_ID_REUSE_ERROR.  Note that this error does
   not cancel the indicated subscription.

   Subscription Status Requests and Subscription Status Responses do not
   include Request IDs.







Schmidt, et al.              Standards Track                   [Page 49]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   In the case where all possible Request ID values have been exhausted
   within the lifetime of a single network Connection ID, the sender MAY
   reuse previously used Request IDs within the same network connection
   if the ID is not being used as a Subscription ID.  In the case where
   reuse is necessary due to exhaustion of possible ID values, the
   SWIMA-PV SHOULD structure the reuse to maximize the time between
   original and subsequent use.  The Request ID value is included in a
   SWIMA Response attribute directly responding to this SWIMA Request to
   indicate which SWIMA Request was received and caused the response.
   Request IDs can be randomly generated or sequential, as long as
   values are not repeated per the rules in this paragraph.  SWIMA-PCs
   are not required to check for duplicate Request IDs, except insofar
   as is necessary to detect Subscription ID reuse.

5.6.  SWIMA Request

   A SWIMA-PV sends this attribute to a SWIMA-PC to request that the
   SWIMA-PC send software inventory information to the SWIMA-PV.  A
   SWIMA-PC MUST NOT send this attribute.

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Flags        |       Software Identifier Count               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Request ID                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Earliest EID                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |    SUB-BLOCK (Repeated "Software Identifier Count" times)     |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Figure 6: SWIMA Request Attribute

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Software Identifier Length  | Software Identifier (var len) |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                Figure 7: SWIMA Request Attribute SUB-BLOCK








Schmidt, et al.              Standards Track                   [Page 50]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   +---------------+---------------------------------------------------+
   | Field         | Description                                       |
   +---------------+---------------------------------------------------+
   | Flags: Bit 0  | If set (1), the SWIMA-PC MUST delete all          |
   | - Clear       | subscriptions established by the requesting       |
   | Subscriptions | SWIMA-PV (barring any errors).                    |
   |               |                                                   |
   | Flags: Bit 1  | If set (1), in addition to responding to the      |
   | - Subscribe   | request as described, the SWIMA-PC MUST establish |
   |               | a subscription with parameters matching those in  |
   |               | the SWIMA Request attribute (barring any errors). |
   |               |                                                   |
   | Flags: Bit 2  | If unset (0), the SWIMA-PC's response MUST        |
   | - Result Type | include Software Inventory Evidence Records, and  |
   |               | thus the response MUST be a Software Inventory,   |
   |               | Software Events, or PA-TNC Error attribute.  If   |
   |               | set (1), the response MUST NOT include Software   |
   |               | Inventory Evidence Records, and thus the response |
   |               | MUST be a Software Identifier Inventory, Software |
   |               | Identifier Events, or PA-TNC Error attribute.     |
   |               |                                                   |
   | Flags: Bits   | Reserved for future use.  This field MUST be set  |
   | 3-7 -         | to zero on transmission and ignored upon          |
   | Reserved      | reception.                                        |
   |               |                                                   |
   | Software      | A 3-byte unsigned integer indicating the number   |
   | Identifier    | of Software Identifiers that follow.  If this     |
   | Count         | value is non-zero, this is a targeted request, as |
   |               | described in Section 3.5.  The Software           |
   |               | Identifier Length and Software Identifier fields  |
   |               | are repeated, in order, the number of times       |
   |               | indicated in this field.  In the case where       |
   |               | Software Identifiers are present, the SWIMA-PC    |
   |               | MUST only report software that corresponds to the |
   |               | identifiers the SWIMA-PV provided in this         |
   |               | attribute (or respond with a PA-TNC Error         |
   |               | attribute).  This field value MAY be 0, in which  |
   |               | case there are no instances of the Software       |
   |               | Identifier Length and Software Identifier fields. |
   |               | In this case, the SWIMA-PV is indicating an       |
   |               | interest in all Software Inventory Evidence       |
   |               | Records on the endpoint (i.e., this is not a      |
   |               | targeted request).                                |
   |               |                                                   |
   | Request ID    | A value that uniquely identifies this SWIMA       |
   |               | Request from a particular SWIMA-PV.               |
   |               |                                                   |




Schmidt, et al.              Standards Track                   [Page 51]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   | Earliest EID  | In the case where the SWIMA-PV is requesting      |
   |               | software events, this field contains the EID      |
   |               | value of the earliest event the SWIMA-PV wishes   |
   |               | to have reported.  (Note: The report will be      |
   |               | inclusive of the event with this EID value.)  In  |
   |               | the case where the SWIMA-PV is requesting an      |
   |               | inventory, then this field MUST be 0              |
   |               | (0x00000000).  In the case where this field is    |
   |               | non-zero, the SWIMA-PV is requesting events, and  |
   |               | the SWIMA-PC MUST respond using a Software        |
   |               | Events, Software Identifier Events, or PA-TNC     |
   |               | Error attribute.  In the case where this field is |
   |               | zero, the SWIMA-PV is requesting an inventory,    |
   |               | and the SWIMA-PC MUST respond using a Software    |
   |               | Inventory, Software Identifier Inventory, or      |
   |               | PA-TNC Error attribute.                           |
   |               |                                                   |
   | Software      | A 2-byte unsigned integer indicating the length,  |
   | Identifier    | in bytes, of the Software Identifier field.       |
   | Length        |                                                   |
   |               |                                                   |
   | Software      | A string containing the Software Identifier value |
   | Identifier    | from a Software Inventory Evidence Record.  This  |
   |               | field value MUST be normalized to Network Unicode |
   |               | format, as described in Section 5.4.  This string |
   |               | MUST NOT be null terminated.                      |
   +---------------+---------------------------------------------------+

                  Table 2: SWIMA Request Attribute Fields

   The SWIMA-PV sends the SWIMA Request attribute to a SWIMA-PC to
   request the indicated information.  Note that between the Result Type
   flag and the Earliest EID field, the SWIMA-PC is constrained to a
   single possible SWIMA Response attribute type (or a PA-TNC Error
   attribute) in its response to the request.

   The Subscribe flag and the Clear Subscriptions flag are used to
   manage subscriptions for the requesting SWIMA-PV on the receiving
   SWIMA-PC.  Specifically, an attribute with the Subscribe flag set
   seeks to establish a new subscription by the requesting SWIMA-PV to
   the given SWIMA-PC, while an attribute with the Clear Subscriptions
   flag set seeks to delete all existing subscriptions by the requesting
   SWIMA-PV on the given SWIMA-PC.  Note that in the latter case, only
   the subscriptions associated with the Connection ID and the Posture
   Validator Identifier of the requester are deleted as described in
   Section 3.8.3.  A newly established subscription has the parameters
   outlined in the SWIMA Request attribute.  Specifically, the Result
   Type flag indicates the type of result to send in fulfillment of the



Schmidt, et al.              Standards Track                   [Page 52]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   subscription, the value of the Earliest EID field indicates whether
   the fulfillment attributes list inventories or events, and the fields
   describing Software Identifiers (if present) indicate if and how a
   subscription is targeted.  In the case that the SWIMA-PC is unable or
   unwilling to comply with the SWIMA-PV's request to establish or clear
   subscriptions, the SWIMA-PC MUST respond with a PA-TNC Error
   attribute with the SWIMA_SUBSCRIPTION_DENIED_ERROR error code.  If
   the SWIMA-PV requests that subscriptions be cleared but has no
   existing subscriptions, this is not an error.

   An attribute requesting the establishment of a subscription is
   effectively doing "double duty", as it is a request for an immediate
   response from the SWIMA-PC in addition to setting up the
   subscription.  Assuming that the SWIMA-PC is willing to comply with
   the subscription, it MUST send an appropriate response attribute to a
   request with the Subscribe flag set containing all requested
   information.  The same is true of the Clear Subscriptions flag --
   assuming that there is no error, the SWIMA-PC MUST generate a
   response attribute without regard to the presence of this flag, in
   addition to clearing its subscription list.

   Both the Subscribe flag and the Clear Subscriptions flag MAY be set
   in a single SWIMA Request attribute.  In the case where this request
   is successful, the end result MUST be equivalent to the SWIMA-PC
   clearing its subscription list for the given SWIMA-PV first and then
   creating a new subscription in accordance with the request
   parameters.  In other words, do not first create the new subscription
   and then clear all the subscriptions (including the one that was just
   created).  In the case that the requested actions are successfully
   completed, the SWIMA-PC MUST respond with a SWIMA Response attribute.
   The specific type of SWIMA Response attribute depends on the Result
   Type flag and the Earliest EID field, as described above.  In the
   case where there is a failure that prevents some part of this request
   from completing, the SWIMA-PC MUST NOT add a new subscription,
   MUST NOT clear the old subscriptions, and MUST respond with a PA-TNC
   Error attribute.  In other words, the SWIMA-PC MUST NOT partially
   succeed at implementing such a request; either all actions succeed or
   none succeed.

   The Earliest EID field is used to indicate if the SWIMA-PV is
   requesting an inventory or event list from the SWIMA-PC.  A value of
   0 (0x00000000) represents a request for inventory information.
   Otherwise, the SWIMA-PV is requesting event information.  For
   Earliest EID values other than 0, the SWIMA-PC MUST respond with
   event records, as described in Section 3.7.  Note that the request
   does not identify a particular EID Epoch, since responses can only
   include events in the SWIMA-PC's current EID Epoch.




Schmidt, et al.              Standards Track                   [Page 53]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   The Software Identifier Count indicates the number of Software
   Identifiers in the attribute.  This number might be any value between
   0 and 16,777,216, inclusive.  A single Software Identifier is
   represented by the following fields: Software Identifier Length and
   Software Identifier.  These fields are repeated a number of times
   equal to the Software Identifier Count, which may be 0.  The Software
   Identifier Length field indicates the number of bytes allocated to
   the Software Identifier field.  The Software Identifier field
   contains a Software Identifier as described in Section 3.4.1.  The
   presence of one or more Software Identifiers is used by the SWIMA-PV
   to indicate a targeted request, which seeks only inventories of or
   events affecting software corresponding to the given identifiers.
   The SWIMA-PC MUST only report software that matched the Software
   Identifiers provided in the SWIMA-PV's SWIMA Request attribute.

5.7.  Software Identifier Inventory

   A SWIMA-PC sends this attribute to a SWIMA-PV to convey the inventory
   of the endpoint's Software Inventory Evidence Collection without the
   inclusion of Software Inventory Evidence Records.  This list might
   represent a complete inventory or a targeted list of records,
   depending on the parameters in the SWIMA-PV's request.  A SWIMA-PV
   MUST NOT send this attribute.  The SWIMA-PC sends this attribute
   either (1) in fulfillment of an existing subscription where the
   establishing request has a Result Type of 1 and the Earliest EID is
   zero or (2) in direct response to a SWIMA Request attribute where the
   Result Type is 1 and the Earliest EID is zero.

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Flags        |         Software Identifier Count             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               Request ID Copy / Subscription ID               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        EID Epoch                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         Last EID                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |    SUB-BLOCK (Repeated "Software Identifier Count" times)     |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

             Figure 8: Software Identifier Inventory Attribute






Schmidt, et al.              Standards Track                   [Page 54]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Record Identifier                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Data Model Type PEN                 |Data Model Type|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Source Id Num |  Reserved     |   Software Identifier Length  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Software Identifier (variable length)            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Software Locator Length     |Software Locator (variable len)|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

        Figure 9: Software Identifier Inventory Attribute SUB-BLOCK

   +----------------+--------------------------------------------------+
   | Field          | Description                                      |
   +----------------+--------------------------------------------------+
   | Flags: Bit 0 - | In the case that this attribute is sent in       |
   | Subscription   | fulfillment of a subscription, this bit MUST be  |
   | Fulfillment    | set (1).  In the case that this attribute is a   |
   |                | direct response to a SWIMA Request, this bit     |
   |                | MUST be unset (0).                               |
   |                |                                                  |
   | Flags: Bits    | Reserved for future use.  This field MUST be set |
   | 1-7 - Reserved | to zero on transmission and ignored upon         |
   |                | reception.                                       |
   |                |                                                  |
   | Software       | The number of Software Identifiers that follow.  |
   | Identifier     | This field is an unsigned integer.  The Record   |
   | Count          | Identifier, Data Model Type PEN, Data Model      |
   |                | Type, Source Identification Number, Reserved,    |
   |                | Software Identifier Length, Software Identifier, |
   |                | Software Locator Length, and Software Locator    |
   |                | fields are repeated, in order, the number of     |
   |                | times indicated in this field.  This field value |
   |                | MAY be 0, in which case there are no instances   |
   |                | of these fields.                                 |
   |                |                                                  |











Schmidt, et al.              Standards Track                   [Page 55]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   | Request ID     | In the case where this attribute is in direct    |
   | Copy /         | response to a SWIMA Request attribute from a     |
   | Subscription   | SWIMA-PV, this field MUST contain an exact copy  |
   | ID             | of the Request ID field from that SWIMA Request. |
   |                | In the case where this attribute is sent in      |
   |                | fulfillment of an active subscription, this      |
   |                | field MUST contain the Subscription ID of the    |
   |                | subscription being fulfilled by this attribute.  |
   |                |                                                  |
   | EID Epoch      | The EID Epoch of the Last EID value.  This field |
   |                | is a 4-byte unsigned integer.                    |
   |                |                                                  |
   | Last EID       | The EID of the last event recorded by the        |
   |                | SWIMA-PC, or 0 if the SWIMA-PC has no recorded   |
   |                | events.  This field is a 4-byte unsigned         |
   |                | integer.                                         |
   |                |                                                  |
   | Record         | A 4-byte unsigned integer containing the Record  |
   | Identifier     | Identifier value from a Software Inventory       |
   |                | Evidence Record.                                 |
   |                |                                                  |
   | Data Model     | A 3-byte unsigned integer containing the Private |
   | Type PEN       | Enterprise Number (PEN) of the organization that |
   |                | assigned the meaning of the Data Model Type      |
   |                | value.                                           |
   |                |                                                  |
   | Data Model     | A 1-byte unsigned integer containing an          |
   | Type           | identifier number that identifies the data model |
   |                | of the reported record.                          |
   |                |                                                  |
   | Source         | The Source Identifier number associated with the |
   | Identification | source from which this software installation     |
   | Number         | inventory instance was reported.                 |
   |                |                                                  |
   | Reserved       | Reserved for future use.  This field MUST be set |
   |                | to zero on transmission and ignored upon         |
   |                | reception.                                       |
   |                |                                                  |
   | Software       | A 2-byte unsigned integer indicating the length, |
   | Identifier     | in bytes, of the Software Identifier field.      |
   | Length         |                                                  |
   |                |                                                  |
   | Software       | A string containing the Software Identifier      |
   | Identifier     | value from a Software Inventory Evidence Record. |
   |                | This field value MUST be normalized to Network   |
   |                | Unicode format, as described in Section 5.4.     |
   |                | This string MUST NOT be null terminated.         |
   |                |                                                  |



Schmidt, et al.              Standards Track                   [Page 56]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   | Software       | A 2-byte unsigned integer indicating the length, |
   | Locator Length | in bytes, of the Software Locator field.         |
   |                |                                                  |
   | Software       | A string containing the Software Locator value.  |
   | Locator        | This field value MUST first be normalized to     |
   |                | Network Unicode format, as described in          |
   |                | Section 5.4, and then encoded as a URI           |
   |                | [RFC3986].  This string MUST NOT be null         |
   |                | terminated.                                      |
   +----------------+--------------------------------------------------+

          Table 3: Software Identifier Inventory Attribute Fields

   In the case that this attribute is sent in fulfillment of a
   subscription, the Subscription Fulfillment bit MUST be set (1).  In
   the case that this attribute is sent in direct response to a SWIMA
   Request, the Subscription Fulfillment bit MUST be unset (0).  Note
   that the SWIMA Response attribute sent in direct response to a SWIMA
   Request that establishes a subscription (i.e., a subscription's
   establishing request) MUST be treated as a direct response to that
   SWIMA Request (and thus the Subscription Fulfillment bit is unset).
   SWIMA Response attributes are only treated as being in fulfillment of
   a subscription (i.e., Subscription Fulfillment bit set) if they are
   sent following a change event, as shown in Figure 3.

   The Software Identifier Count field indicates the number of Software
   Identifiers present in this inventory.  Each Software Identifier is
   represented by the following set of fields: Record Identifier, Data
   Model Type PEN, Data Model Type, Source Identification Number,
   Reserved, Software Identifier Length, Software Identifier, Software
   Locator Length, and Software Locator.  These fields will appear once
   for each reported record.

   When responding directly to a SWIMA Request attribute, the Request ID
   Copy / Subscription ID field MUST contain an exact copy of the
   Request ID field from that SWIMA Request.  When this attribute is
   sent in fulfillment of an existing subscription on this SWIMA-PC,
   this field MUST contain the Subscription ID of the fulfilled
   subscription.

   The EID Epoch field indicates the EID Epoch of the Last EID value.
   The Last EID field MUST contain the EID of the last recorded change
   event (see Section 3.7 for more about EIDs and recorded events) at
   the time this inventory was collected.  In the case where there are
   no recorded change events at the time that this inventory was
   collected, the Last EID field MUST contain 0.  These fields can be





Schmidt, et al.              Standards Track                   [Page 57]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   interpreted to indicate that the provided inventory reflects the
   state of the endpoint after all changes up to and including this last
   event have been accounted for.

   The Data Model Type PEN and Data Model Type fields are used to
   identify the data model associated with the given software record.
   These fields are discussed more in Section 3.4.2.

   The Source Identification Number field is used to identify the source
   that provided the given record, as described in Section 3.1.

5.8.  Software Identifier Events

   A SWIMA-PC sends this attribute to a SWIMA-PV to convey events where
   the affected records are reported without Software Inventory Evidence
   Records.  A SWIMA-PV MUST NOT send this attribute.  The SWIMA-PC
   sends this attribute either (1) in fulfillment of an existing
   subscription where the establishing request has a Result Type of 1
   and the Earliest EID is non-zero or (2) in direct response to a SWIMA
   Request attribute where the Result Type is 1 and the Earliest EID is
   non-zero.

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Flags        |                Event Count                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            Request ID Copy / Subscription ID                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       EID Epoch                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Last EID                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               Last Consulted EID                              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |            SUB-BLOCK (Repeated "Event Count" times)           |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

              Figure 10: Software Identifier Events Attribute










Schmidt, et al.              Standards Track                   [Page 58]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            EID                                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +-                                                             -+
   |                                                               |
   +-                                                             -+
   |                         Timestamp                             |
   +-                                                             -+
   |                                                               |
   +-                                                             -+
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Record Identifier                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Data Model Type PEN                 |Data Model Type|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Source Id Num |  Action       |   Software Identifier Length  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Software Identifier (variable length)            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Software Locator Length     |Software Locator (variable len)|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

         Figure 11: Software Identifier Events Attribute SUB-BLOCK
























Schmidt, et al.              Standards Track                   [Page 59]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   +----------------+--------------------------------------------------+
   | Field          | Description                                      |
   +----------------+--------------------------------------------------+
   | Flags: Bit 0 - | In the case that this attribute is sent in       |
   | Subscription   | fulfillment of a subscription, this bit MUST be  |
   | Fulfillment    | set (1).  In the case that this attribute is a   |
   |                | direct response to a SWIMA Request, this bit     |
   |                | MUST be unset (0).                               |
   |                |                                                  |
   | Flags: Bits    | Reserved for future use.  This field MUST be set |
   | 1-7 - Reserved | to zero on transmission and ignored upon         |
   |                | reception.                                       |
   |                |                                                  |
   | Event Count    | The number of events that are reported in this   |
   |                | attribute.  This field is a 3-byte unsigned      |
   |                | integer.  The EID, Timestamp, Record Identifier, |
   |                | Data Model Type PEN, Data Model Type, Source     |
   |                | Identification Number, Action, Software          |
   |                | Identifier Length, Software Identifier, Software |
   |                | Locator Length, and Software Locator fields are  |
   |                | repeated, in order, the number of times          |
   |                | indicated in this field.  This field value MAY   |
   |                | be 0, in which case there are no instances of    |
   |                | these fields.                                    |
   |                |                                                  |
   | Request ID     | In the case where this attribute is in direct    |
   | Copy /         | response to a SWIMA Request attribute from a     |
   | Subscription   | SWIMA-PV, this field MUST contain an exact copy  |
   | ID             | of the Request ID field from that SWIMA Request. |
   |                | In the case where this attribute is sent in      |
   |                | fulfillment of an active subscription, this      |
   |                | field MUST contain the Subscription ID of the    |
   |                | subscription being fulfilled by this attribute.  |
   |                |                                                  |
   | EID Epoch      | The EID Epoch of the Last EID value.  This field |
   |                | is a 4-byte unsigned integer.                    |
   |                |                                                  |
   | Last EID       | The EID of the last event recorded by the        |
   |                | SWIMA-PC, or 0 if the SWIMA-PC has no recorded   |
   |                | events.  This field contains the EID of the      |
   |                | SWIMA-PC's last recorded change event (which     |
   |                | might or might not be included as an event       |
   |                | record in this attribute).                       |
   |                |                                                  |







Schmidt, et al.              Standards Track                   [Page 60]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   | Last Consulted | The EID of the last event record that was        |
   | EID            | consulted when generating the event record list  |
   |                | included in this attribute.  This is different   |
   |                | from the Last EID field value if and only if     |
   |                | this attribute is conveying a partial list of    |
   |                | event records.  See Section 3.7.5 for more on    |
   |                | partial lists of event records.                  |
   |                |                                                  |
   | EID            | The EID of the event in this event record.       |
   |                |                                                  |
   | Timestamp      | The timestamp associated with the event in this  |
   |                | event record.  This timestamp is the SWIMA-PC's  |
   |                | best understanding of when the given event       |
   |                | occurred.  Note that this timestamp might be an  |
   |                | estimate.  The Timestamp date and time MUST be   |
   |                | represented as an ASCII string that is expressed |
   |                | in Coordinated Universal Time (UTC) and is       |
   |                | compliant with RFC 3339 [RFC3339], with the      |
   |                | additional restrictions that the 'T' delimiter   |
   |                | and the 'Z' suffix MUST be capitalized and       |
   |                | fractional seconds (time-secfrac) MUST NOT be    |
   |                | included.  This field conforms to the date-time  |
   |                | ABNF production from Section 5.6 of RFC 3339,    |
   |                | with the above restrictions.  Leap seconds are   |
   |                | permitted, and SWIMA-PVs MUST support them.  The |
   |                | Timestamp string MUST NOT be null terminated or  |
   |                | padded in any way.  The length of this field is  |
   |                | always 20 octets.                                |
   |                |                                                  |
   | Record         | A 4-byte unsigned integer containing the Record  |
   | Identifier     | Identifier value from a Software Inventory       |
   |                | Evidence Record.                                 |
   |                |                                                  |
   | Data Model     | A 3-byte unsigned integer containing the PEN of  |
   | Type PEN       | the organization that assigned the meaning of    |
   |                | the Data Model Type value.                       |
   |                |                                                  |
   | Data Model     | A 1-byte unsigned integer containing an          |
   | Type           | identifier number that identifies the data model |
   |                | of the reported record.                          |
   |                |                                                  |
   | Source         | The Source Identifier number associated with the |
   | Identification | source for the software installation inventory   |
   | Number         | instance that this event record reported.        |
   |                |                                                  |






Schmidt, et al.              Standards Track                   [Page 61]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   | Action         | The type of event that is recorded in this event |
   |                | record.  Possible values are as follows: 1 =     |
   |                | CREATION - the addition of a record to the       |
   |                | endpoint's Software Inventory Evidence           |
   |                | Collection; 2 = DELETION - the removal of a      |
   |                | record from the endpoint's Software Inventory    |
   |                | Evidence Collection; 3 = ALTERATION - an         |
   |                | alteration that was made to a record within the  |
   |                | endpoint's Software Inventory Evidence           |
   |                | Collection.  All other values are reserved for   |
   |                | future use and MUST NOT be used when sending     |
   |                | attributes.  In the case where a SWIMA-PV        |
   |                | receives an event record that uses an action     |
   |                | value other than the ones defined here, it MUST  |
   |                | ignore that event record but SHOULD process      |
   |                | other event records in this attribute as normal. |
   |                |                                                  |
   | Software       | A 2-byte unsigned integer indicating the length, |
   | Identifier     | in bytes, of the Software Identifier field.      |
   | Length         |                                                  |
   |                |                                                  |
   | Software       | A string containing the Software Identifier      |
   | Identifier     | value from a Software Inventory Evidence Record. |
   |                | This field value MUST first be normalized to     |
   |                | Network Unicode format, as described in          |
   |                | Section 5.4.  This string MUST NOT be null       |
   |                | terminated.                                      |
   |                |                                                  |
   | Software       | A 2-byte unsigned integer indicating the length, |
   | Locator Length | in bytes, of the Software Locator field.         |
   |                |                                                  |
   | Software       | A string containing the Software Locator value.  |
   | Locator        | This field value MUST first be normalized to     |
   |                | Network Unicode format, as described in          |
   |                | Section 5.4, and then encoded as a URI           |
   |                | [RFC3986].  This string MUST NOT be null         |
   |                | terminated.                                      |
   +----------------+--------------------------------------------------+

           Table 4: Software Identifier Events Attribute Fields

   The first few fields in the Software Identifier Events attribute
   mirror those in the Software Identifier Inventory attribute.  The
   primary difference is that instead of conveying an inventory the
   attribute conveys zero or more event records, consisting of the EID,
   Timestamp, Record Identifier, Data Model Type PEN, Data Model Type,





Schmidt, et al.              Standards Track                   [Page 62]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   Source Identification Number, Action, Software Identifier Length,
   Software Identifier, Software Locator Length, and Software Locator
   fields of the affected Software Inventory Evidence Record.

   With regard to the Timestamp field, it is important to note that
   clock skew between the SWIMA-PC and SWIMA-PV as well as between
   different SWIMA-PCs within an enterprise might make correlation of
   Timestamp values difficult.  This specification does not attempt to
   resolve clock skew issues, although other mechanisms (which are
   outside the scope of this specification) do exist to reduce the
   impact of clock skew and make the timestamp more useful for such
   correlation.  Instead, SWIMA uses the Timestamp value primarily as a
   means to indicate the amount of time between two events on a single
   endpoint.  For example, by taking the difference of the times for
   when a record was removed and then subsequently re-added, one can get
   an indication as to how long the system was without the given record
   (and thus without the associated software).  Since this will involve
   comparison of Timestamp values all originating on the same system,
   clock skew between the SWIMA-PC and SWIMA-PV is not an issue.
   However, if the SWIMA-PC's clock was adjusted between two recorded
   events, it is possible for such a calculation to lead to
   misunderstandings regarding the temporal distance between events.
   Users of this field need to be aware of the possibility for such
   occurrences.  In the case where the Timestamp values of two events
   appear to contradict the EID ordering of those events (i.e., the
   later EID has an earlier timestamp), the recipient MUST treat the EID
   ordering as correct.

   All events recorded in a Software Identifier Events attribute are
   required to be part of the same EID Epoch.  Specifically, all such
   reported events MUST have an EID that is from the same EID Epoch and
   that is the same as the EID Epoch of the Last EID and Last Consulted
   EID values.  The SWIMA-PC MUST NOT report events with EIDs from
   different EID Epochs.

   The Last Consulted EID field contains the EID of the last event
   record considered for inclusion in this attribute.  If this attribute
   contains a partial event set (as described in Section 3.7.5), this
   field value will be less than the Last EID value; if this attribute
   contains a complete event set, the Last EID and Last Consulted EID
   values are identical.

   If multiple events are sent in a Software Identifier Events
   attribute, the order in which they appear within the attribute is not
   significant.  The EIDs associated with them are used for ordering the
   indicated events appropriately.  Also note that a single software
   record might be reported multiple times in an attribute, such as if
   multiple events involving the associated record were being reported.



Schmidt, et al.              Standards Track                   [Page 63]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


5.9.  Software Inventory

   A SWIMA-PC sends this attribute to a SWIMA-PV to convey a list of
   inventory records.  A SWIMA-PV MUST NOT send this attribute.  The
   SWIMA-PC sends this attribute either (1) in fulfillment of an
   existing subscription where the establishing request has a Result
   Type of 0 and the Earliest EID is zero or (2) in direct response to a
   SWIMA Request attribute where the Result Type is 0 and the Earliest
   EID is zero.

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Flags         |             Record Count                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                Request ID Copy / Subscription ID              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            EID Epoch                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            Last EID                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |          SUB-BLOCK (Repeated "Record Count" times)            |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                  Figure 12: Software Inventory Attribute

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Record Identifier                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Data Model Type PEN                 |Data Model Type|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Source Id Num |  Reserved     |   Software Identifier Length  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Software Identifier (variable length)            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Software Locator Length     |Software Locator (variable len)|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Record Length                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   Record (variable length)                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

             Figure 13: Software Inventory Attribute SUB-BLOCK




Schmidt, et al.              Standards Track                   [Page 64]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   +----------------+--------------------------------------------------+
   | Field          | Description                                      |
   +----------------+--------------------------------------------------+
   | Flags: Bit 0 - | In the case that this attribute is sent in       |
   | Subscription   | fulfillment of a subscription, this bit MUST be  |
   | Fulfillment    | set (1).  In the case that this attribute is a   |
   |                | direct response to a SWIMA Request, this bit     |
   |                | MUST be unset (0).                               |
   |                |                                                  |
   | Flags: Bits    | Reserved for future use.  This field MUST be set |
   | 1-7 - Reserved | to zero on transmission and ignored upon         |
   |                | reception.                                       |
   |                |                                                  |
   | Record Count   | The number of records that follow.  This field   |
   |                | is a 3-byte unsigned integer.  The Record        |
   |                | Identifier, Data Model Type PEN, Data Model      |
   |                | Type, Source Identification Number, Reserved,    |
   |                | Software Identifier Length, Software Identifier, |
   |                | Software Locator Length, Software Locator,       |
   |                | Record Length, and Record fields are repeated,   |
   |                | in order, the number of times indicated in this  |
   |                | field.  This field value MAY be 0, in which case |
   |                | there are no instances of these fields.          |
   |                |                                                  |
   | Request ID     | In the case where this attribute is in direct    |
   | Copy /         | response to a SWIMA Request attribute from a     |
   | Subscription   | SWIMA-PV, this field MUST contain an exact copy  |
   | ID             | of the Request ID field from that SWIMA Request. |
   |                | In the case where this attribute is sent in      |
   |                | fulfillment of an active subscription, this      |
   |                | field MUST contain the Subscription ID of the    |
   |                | subscription being fulfilled by this attribute.  |
   |                |                                                  |
   | EID Epoch      | The EID Epoch of the Last EID value.  This field |
   |                | is a 4-byte unsigned integer.                    |
   |                |                                                  |
   | Last EID       | The EID of the last event recorded by the        |
   |                | SWIMA-PC, or 0 if the SWIMA-PC has no recorded   |
   |                | events.  This field is a 4-byte unsigned         |
   |                | integer.                                         |
   |                |                                                  |
   | Record         | A 4-byte unsigned integer containing the Record  |
   | Identifier     | Identifier value from a Software Inventory       |
   |                | Evidence Record.                                 |
   |                |                                                  |






Schmidt, et al.              Standards Track                   [Page 65]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   | Data Model     | A 3-byte unsigned integer containing the PEN of  |
   | Type PEN       | the organization that assigned the meaning of    |
   |                | the Data Model Type value.                       |
   |                |                                                  |
   | Data Model     | A 1-byte unsigned integer containing an          |
   | Type           | identifier number that identifies the data model |
   |                | of the reported record.                          |
   |                |                                                  |
   | Source         | The Source Identifier number associated with the |
   | Identification | source from which this software installation     |
   | Number         | inventory instance was reported.                 |
   |                |                                                  |
   | Reserved       | Reserved for future use.  This field MUST be set |
   |                | to zero on transmission and ignored upon         |
   |                | reception.                                       |
   |                |                                                  |
   | Software       | A 2-byte unsigned integer indicating the length, |
   | Identifier     | in bytes, of the Software Identifier field.      |
   | Length         |                                                  |
   |                |                                                  |
   | Software       | A string containing the Software Identifier      |
   | Identifier     | value from a Software Inventory Evidence Record. |
   |                | This field value MUST first be normalized to     |
   |                | Network Unicode format, as described in          |
   |                | Section 5.4.  This string MUST NOT be null       |
   |                | terminated.                                      |
   |                |                                                  |
   | Software       | A 2-byte unsigned integer indicating the length, |
   | Locator Length | in bytes, of the Software Locator field.         |
   |                |                                                  |
   | Software       | A string containing the Software Locator value.  |
   | Locator        | This field value MUST first be normalized to     |
   |                | Network Unicode format, as described in          |
   |                | Section 5.4, and then encoded as a URI           |
   |                | [RFC3986].  This string MUST NOT be null         |
   |                | terminated.                                      |
   |                |                                                  |
   | Record Length  | A 4-byte unsigned integer indicating the length, |
   |                | in bytes, of the Record field.                   |
   |                |                                                  |
   | Record         | A Software Inventory Evidence Record expressed   |
   |                | as a string.  The record MUST be converted and   |
   |                | normalized to Network Unicode format, as         |
   |                | described in Section 5.4.  This string MUST NOT  |
   |                | be null terminated.                              |
   +----------------+--------------------------------------------------+

               Table 5: Software Inventory Attribute Fields



Schmidt, et al.              Standards Track                   [Page 66]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   The Software Inventory attribute contains some number of Software
   Inventory Evidence Records along with the core response attribute
   fields.  Given that the size of records can vary considerably, the
   length of this attribute is highly variable and, if transmitting a
   complete inventory, can be extremely large.  To avoid unnecessarily
   overburdening the network, enterprises might wish to constrain the
   use of Software Inventory attributes to targeted requests.

   When copying a Software Inventory Evidence Record into the Record
   field, the record MUST be converted and normalized to use Network
   Unicode format prior to its inclusion in the Record field.

5.10.  Software Events

   A SWIMA-PC sends this attribute to a SWIMA-PV to convey a list of
   events that include Software Inventory Evidence Records.  A SWIMA-PV
   MUST NOT send this attribute.  The SWIMA-PC sends this attribute
   either (1) in fulfillment of an existing subscription where the
   establishing request has a Result Type of 0 and the Earliest EID is
   non-zero or (2) in direct response to a SWIMA Request attribute where
   the Result Type is 0 and the Earliest EID is non-zero.

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Flags       |                  Event Count                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |               Request ID Copy / Subscription ID               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           EID Epoch                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           Last EID                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Last Consulted EID                      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |             SUB-BLOCK (Repeated "Event Count" times)          |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                   Figure 14: Software Events Attribute










Schmidt, et al.              Standards Track                   [Page 67]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             EID                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +-                                                             -+
   |                                                               |
   +-                                                             -+
   |                         Timestamp                             |
   +-                                                             -+
   |                                                               |
   +-                                                             -+
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Record Identifier                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Data Model Type PEN                 |Data Model Type|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Source Id Num |  Action       |   Software Identifier Length  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Software Identifier (variable length)            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Software Locator Length     |Software Locator (variable len)|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Record Length                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Record (variable length)                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

              Figure 15: Software Events Attribute SUB-BLOCK




















Schmidt, et al.              Standards Track                   [Page 68]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   +----------------+--------------------------------------------------+
   | Field          | Description                                      |
   +----------------+--------------------------------------------------+
   | Flags: Bit 0 - | In the case that this attribute is sent in       |
   | Subscription   | fulfillment of a subscription, this bit MUST be  |
   | Fulfillment    | set (1).  In the case that this attribute is a   |
   |                | direct response to a SWIMA Request, this bit     |
   |                | MUST be unset (0).                               |
   |                |                                                  |
   | Flags: Bits    | Reserved for future use.  This field MUST be set |
   | 1-7 - Reserved | to zero on transmission and ignored upon         |
   |                | reception.                                       |
   |                |                                                  |
   | Event Count    | The number of events being reported in this      |
   |                | attribute.  This field is a 3-byte unsigned      |
   |                | integer.  The EID, Timestamp, Record Identifier, |
   |                | Data Model Type PEN, Data Model Type, Source     |
   |                | Identification Number, Action, Software          |
   |                | Identifier Length, Software Identifier, Software |
   |                | Locator Length, Software Locator, Record Length, |
   |                | and Record fields are repeated, in order, the    |
   |                | number of times indicated in this field.  This   |
   |                | field value MAY be 0, in which case there are no |
   |                | instances of these fields.                       |
   |                |                                                  |
   | Request ID     | In the case where this attribute is in direct    |
   | Copy /         | response to a SWIMA Request attribute from a     |
   | Subscription   | SWIMA-PV, this field MUST contain an exact copy  |
   | ID             | of the Request ID field from that SWIMA Request. |
   |                | In the case where this attribute is sent in      |
   |                | fulfillment of an active subscription, this      |
   |                | field MUST contain the Subscription ID of the    |
   |                | subscription being fulfilled by this attribute.  |
   |                |                                                  |
   | EID Epoch      | The EID Epoch of the Last EID value.  This field |
   |                | is a 4-byte unsigned integer.                    |
   |                |                                                  |
   | Last EID       | The EID of the last event recorded by the        |
   |                | SWIMA-PC, or 0 if the SWIMA-PC has no recorded   |
   |                | events.  This field contains the EID of the      |
   |                | SWIMA-PC's last recorded change event (which     |
   |                | might or might not be included as an event       |
   |                | record in this attribute).                       |
   |                |                                                  |







Schmidt, et al.              Standards Track                   [Page 69]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   | Last Consulted | The EID of the last event record that was        |
   | EID            | consulted when generating the event record list  |
   |                | included in this attribute.  This is different   |
   |                | from the Last EID field value if and only if     |
   |                | this attribute is conveying a partial list of    |
   |                | event records.  See Section 3.7.5 for more on    |
   |                | partial lists of event records.                  |
   |                |                                                  |
   | EID            | The EID of the event in this event record.       |
   |                |                                                  |
   | Timestamp      | The timestamp associated with the event in this  |
   |                | event record.  This timestamp is the SWIMA-PC's  |
   |                | best understanding of when the given event       |
   |                | occurred.  Note that this timestamp might be an  |
   |                | estimate.  The Timestamp date and time MUST be   |
   |                | represented as an ASCII string that is expressed |
   |                | in Coordinated Universal Time (UTC) and is       |
   |                | compliant with RFC 3339 [RFC3339], with the      |
   |                | additional restrictions that the 'T' delimiter   |
   |                | and the 'Z' suffix MUST be capitalized and       |
   |                | fractional seconds (time-secfrac) MUST NOT be    |
   |                | included.  This field conforms to the date-time  |
   |                | ABNF production from Section 5.6 of RFC 3339,    |
   |                | with the above restrictions.  Leap seconds are   |
   |                | permitted, and SWIMA-PVs MUST support them.  The |
   |                | Timestamp string MUST NOT be null terminated or  |
   |                | padded in any way.  The length of this field is  |
   |                | always 20 octets.                                |
   |                |                                                  |
   | Record         | A 4-byte unsigned integer containing the Record  |
   | Identifier     | Identifier value from a Software Inventory       |
   |                | Evidence Record.                                 |
   |                |                                                  |
   | Data Model     | A 3-byte unsigned integer containing the PEN of  |
   | Type PEN       | the organization that assigned the meaning of    |
   |                | the Data Model Type value.                       |
   |                |                                                  |
   | Data Model     | A 1-byte unsigned integer containing an          |
   | Type           | identifier number that identifies the data model |
   |                | of the reported record.                          |
   |                |                                                  |
   | Source         | The Source Identifier number associated with the |
   | Identification | source for the software installation inventory   |
   | Number         | instance that this event record reported.        |
   |                |                                                  |






Schmidt, et al.              Standards Track                   [Page 70]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   | Action         | The type of event that is recorded in this event |
   |                | record.  Possible values are as follows: 1 =     |
   |                | CREATION - the addition of a record to the       |
   |                | endpoint's Software Inventory Evidence           |
   |                | Collection; 2 = DELETION - the removal of a      |
   |                | record from the endpoint's Software Inventory    |
   |                | Evidence Collection; 3 = ALTERATION - an         |
   |                | alteration that was made to a record within the  |
   |                | endpoint's Software Inventory Evidence           |
   |                | Collection.  All other values are reserved for   |
   |                | future use and MUST NOT be used when sending     |
   |                | attributes.  In the case where a SWIMA-PV        |
   |                | receives an event record that uses an action     |
   |                | value other than the ones defined here, it MUST  |
   |                | ignore that event record but SHOULD process      |
   |                | other event records in this attribute as normal. |
   |                |                                                  |
   | Software       | A 2-byte unsigned integer indicating the length, |
   | Identifier     | in bytes, of the Software Identifier field.      |
   | Length         |                                                  |
   |                |                                                  |
   | Software       | A string containing the Software Identifier      |
   | Identifier     | value from a Software Inventory Evidence Record. |
   |                | This field value MUST first be normalized to     |
   |                | Network Unicode format, as described in          |
   |                | Section 5.4.  This string MUST NOT be null       |
   |                | terminated.                                      |
   |                |                                                  |
   | Software       | A 2-byte unsigned integer indicating the length, |
   | Locator Length | in bytes, of the Software Locator field.         |
   |                |                                                  |
   | Software       | A string containing the Software Locator value.  |
   | Locator        | This field value MUST first be normalized to     |
   |                | Network Unicode format, as described in          |
   |                | Section 5.4, and then encoded as a URI           |
   |                | [RFC3986].  This string MUST NOT be null         |
   |                | terminated.                                      |
   |                |                                                  |













Schmidt, et al.              Standards Track                   [Page 71]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   | Record Length  | A 4-byte unsigned integer indicating the length, |
   |                | in bytes, of the Record field.                   |
   |                |                                                  |
   | Record         | A Software Inventory Evidence Record expressed   |
   |                | as a string.  The record MUST be converted and   |
   |                | normalized to Network Unicode format, as         |
   |                | described in Section 5.4.  This string MUST NOT  |
   |                | be null terminated.                              |
   +----------------+--------------------------------------------------+

                 Table 6: Software Events Attribute Fields

   The fields of this attribute are used in the same way as the
   corresponding fields of the previous attributes.  As with the
   Software Inventory attribute, a Software Events attribute can be
   quite large if many events have occurred following the event
   indicated by a request's Earliest EID.  As such, it is recommended
   that the SWIMA Request attributes only request that full records be
   sent (Result Type set to zero) in a targeted request, thus
   constraining the response just to records that match a given set of
   Software Identifiers.

   As with the Software Identifier Events attribute, this attribute MUST
   only contain event records with EIDs coming from the current EID
   Epoch of the SWIMA-PC.

   As with the Software Inventory attribute, the SWIMA-PC MUST perform
   conversion and normalization of the record.

5.11.  Subscription Status Request

   A SWIMA-PV sends this attribute to a SWIMA-PC to request a list of
   active subscriptions for which the requesting SWIMA-PV is the
   subscriber.  A SWIMA-PC MUST NOT send this attribute.

   This attribute has no fields.

   A SWIMA-PC MUST respond to this attribute by sending a Subscription
   Status Response attribute (or a PA-TNC Error attribute if it is
   unable to correctly provide a response).











Schmidt, et al.              Standards Track                   [Page 72]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


5.12.  Subscription Status Response

   A SWIMA-PC sends this attribute to a SWIMA-PV to report the list of
   active subscriptions for which the receiving SWIMA-PV is the
   subscriber.  A SWIMA-PV MUST NOT send this attribute.

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Status Flags  |            Subscription Record Count          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |    SUB-BLOCK (Repeated "Subscription Record Count" times)     |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

             Figure 16: Subscription Status Response Attribute

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Flags         |          Software Identifier Count            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Request ID                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         Earliest EID                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |  SUB-SUB-BLOCK (Repeated "Software Identifier Count" times)   |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

        Figure 17: Subscription Status Response Attribute SUB-BLOCK

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Software Identifier Length   | Software Identifier (var len) |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      Figure 18: Subscription Status Response Attribute SUB-SUB-BLOCK










Schmidt, et al.              Standards Track                   [Page 73]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   +--------------+----------------------------------------------------+
   | Field        | Description                                        |
   +--------------+----------------------------------------------------+
   | Status       | Reserved for future use.  This field MUST be set   |
   | Flags: Bits  | to zero on transmission and ignored upon           |
   | 0-7 -        | reception.                                         |
   | Reserved     |                                                    |
   |              |                                                    |
   | Subscription | The number of subscription records that follow.    |
   | Record Count | This field is a 3-byte unsigned integer.  The      |
   |              | Flags, Software Identifier Count, Request ID, and  |
   |              | Earliest EID fields, and zero or more instances of |
   |              | Software Identifier Length and Software            |
   |              | Identifier, are repeated, in order, the number of  |
   |              | times indicated in this field.  (The Software      |
   |              | Identifier Length and Software Identifier fields   |
   |              | within each of these sets of fields are repeated a |
   |              | number of times equal to the preceding Software    |
   |              | Identifier Count value.)  The Subscription Record  |
   |              | Count field value MAY be 0, in which case there    |
   |              | are no instances of these fields.                  |
   |              |                                                    |
   | Flags,       | For each active subscription, these fields contain |
   | Software     | an exact copy of the fields with the corresponding |
   | Identifier   | name provided in the subscription's establishing   |
   | Count,       | request.                                           |
   | Request ID,  |                                                    |
   | Earliest     |                                                    |
   | EID,         |                                                    |
   | Software     |                                                    |
   | Identifier   |                                                    |
   | Length, and  |                                                    |
   | Software     |                                                    |
   | Identifier   |                                                    |
   +--------------+----------------------------------------------------+

               Table 7: Subscription Status Response Fields

   A Subscription Status Response contains zero or more subscription
   records.  Specifically, it MUST contain one subscription record for
   each active subscription associated with the party that sent the
   Subscription Status Request to which this attribute is a response.
   As described in Section 3.8.2, the SWIMA-PC MUST use the requester's
   Connection ID and its Posture Validator Identifier to determine which
   subscriptions are associated with the requester.






Schmidt, et al.              Standards Track                   [Page 74]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   A SWIMA-PC MUST send a Subscription Status Response attribute in
   response to a Subscription Status Request attribute, except in cases
   where the SWIMA-PC experiences an error condition that prevents it
   from correctly populating the Subscription Status Response attribute
   (in which case it MUST respond with a PA-TNC Error attribute
   appropriate to the type of error experienced).  If there are no
   active subscriptions associated with the requesting party, the
   Subscription Status Response attribute will consist only of its
   Status Flags field and a Subscription Record Count field with a value
   of 0, and no additional fields.

   Each subscription record included in a Subscription Status Response
   attribute duplicates the fields of the SWIMA Request attribute that
   was the establishing request of a subscription.  Note that the
   Request ID field in the record captures the Subscription ID
   associated with the given subscription record (since the Subscription
   ID is the same as the Request ID of the establishing request).  Note
   also that if the establishing request is targeted, then its Record
   Count field will be non-zero and, within that subscription record,
   the Software Identifier Length and Software Identifier fields are
   repeated, in order, the number of times indicated in the Record Count
   field.  As such, each subscription record can be different sizes.  If
   the establishing request is not targeted (Record Count field is 0),
   the subscription record has no Software Identifier Length or Software
   Identifier fields.

   When a SWIMA-PV compares the information received in a Subscription
   Status Response to its own records of active subscriptions, it should
   be aware that the SWIMA-PC might be unable to distinguish this
   SWIMA-PV from other SWIMA-PVs on the same NEA Server.  As a result,
   it is possible that the SWIMA-PC will report more subscription
   records than the SWIMA-PV recognizes.  For this reason, SWIMA-PVs
   SHOULD NOT automatically assume that extra subscriptions reported in
   a Subscription Status Response indicate a problem.

5.13.  Source Metadata Request

   A SWIMA-PV sends this attribute to a SWIMA-PC to request metadata
   about sources that the SWIMA-PC is using to collect software
   inventory information.  A SWIMA-PC MUST NOT send this attribute.

   This attribute has no fields.

   A SWIMA-PC MUST respond to this attribute by sending a Source
   Metadata Response attribute (or a PA-TNC Error attribute if it is
   unable to correctly provide a response).





Schmidt, et al.              Standards Track                   [Page 75]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


5.14.  Source Metadata Response

   A SWIMA-PC sends this attribute to a SWIMA-PV to provide descriptive
   metadata about the sources of software inventory information used by
   the SWIMA-PC.  A SWIMA-PV MUST NOT send this attribute.

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Reserved            | Source Count  |               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               |
   |                                                               |
   |           SUB-BLOCK (Repeated "Source Count" times)           |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

               Figure 19: Source Metadata Response Attribute

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Source Id Num |       Metadata Length         | Metadata (var)|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

          Figure 20: Source Metadata Response Attribute SUB-BLOCK


























Schmidt, et al.              Standards Track                   [Page 76]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   +----------------+--------------------------------------------------+
   | Field          | Description                                      |
   +----------------+--------------------------------------------------+
   | Reserved       | Reserved for future use.  This field MUST be set |
   |                | to zero on transmission and ignored upon         |
   |                | reception.                                       |
   |                |                                                  |
   | Source Count   | The number of source records that follow.  The   |
   |                | Source Identification Number, Metadata Length,   |
   |                | and Metadata fields are repeated, in order, the  |
   |                | number of times indicated by this field.  This   |
   |                | field MAY be 0, in which case no fields follow   |
   |                | (but this would only be done to indicate that    |
   |                | the SWIMA-PC has no active sources; this would   |
   |                | not be a typical situation).                     |
   |                |                                                  |
   | Source         | The Source Identifier number associated with the |
   | Identification | described source for any communications with the |
   | Number         | recipient SWIMA-PV.                              |
   |                |                                                  |
   | Metadata       | A 2-byte unsigned integer indicating the length, |
   | Length         | in bytes, of the Metadata field.                 |
   |                |                                                  |
   | Metadata       | A string containing descriptive metadata about   |
   |                | the indicated data source.  This string MUST NOT |
   |                | be null terminated.                              |
   +----------------+--------------------------------------------------+

                 Table 8: Source Metadata Response Fields

   A Source Metadata Response attribute contains zero or more records,
   each describing one of the data sources the SWIMA-PC uses to collect
   software inventory information.  It SHOULD contain one metadata
   record for each source that the SWIMA-PC uses.  (There might be
   reasons not to inform certain SWIMA-PVs of the presence of certain
   data sources.)  The attribute MUST contain a metadata record for each
   source that has been identified in inventory or event messages to the
   given SWIMA-PV.

   A SWIMA-PC MUST send a Source Metadata Response attribute in response
   to a Source Metadata Request attribute, except in cases where the
   SWIMA-PC experiences an error condition that prevents it from
   correctly populating the Source Metadata Response attribute (in which
   case it MUST respond with a PA-TNC Error attribute appropriate to the
   type of error experienced).






Schmidt, et al.              Standards Track                   [Page 77]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   The Source Count field indicates how many source metadata records are
   included in the attribute.  Each included record consists of a Source
   Identification Number field, a Metadata Length field, and a Metadata
   field.

   The Source Identification Number field in the Source Metadata
   Response attribute corresponds to the Source Identification Number
   field in inventory and event messages.  In the case where (1) the
   Source Identification Number value in this attribute matches a Source
   Identification Number field in an inventory or event record and
   (2) both the Source Metadata Response and the inventory or event
   record were sent to the same SWIMA-PV, the source described in the
   Metadata field MUST be the same source that provided the inventory or
   event record associated with this Source Identifier.  Recall that a
   SWIMA-PC MAY use different Source Identification Number associations
   with different SWIMA-PVs.  As such, the association between a Source
   Identification Number and the conveyed metadata is also only
   meaningful for communications between the sending SWIMA-PC and
   receiving SWIMA-PV.  When sending to a given SWIMA-PV, the SWIMA-PC
   MUST use the recipient SWIMA-PV's Source Identification Number
   associations.

   The Metadata Length field indicates the length, in bytes, of the
   Metadata field.  The Metadata field contains information about the
   indicated data source.  This specification does not dictate a format
   for the contents of the Metadata field.  This field MAY include
   machine-readable information.  For broadest utility, the Metadata
   field SHOULD include human-readable, descriptive information about
   the data source.

5.15.  PA-TNC Error as Used by SWIMA

   The PA-TNC Error attribute is defined in the PA-TNC specification
   [RFC5792], and its use here conforms to that specification.  A PA-TNC
   Error can be sent due to any error in the PA-TNC exchange and might
   also be sent in response to error conditions specific to the SWIMA
   exchange.  The latter case utilizes error codes defined below.

   A PA-TNC Error MUST be sent by a SWIMA-PC in response to a SWIMA
   Request in the case where the SWIMA-PC encounters a fatal error
   (i.e., an error that prevents further processing of an exchange)
   relating to the attribute exchange.  A SWIMA-PV MUST NOT send this
   attribute.  In the case where the SWIMA-PV experiences a fatal error,
   it MUST handle the error without sending a PA-TNC Error attribute.
   The SWIMA-PV MAY take other actions in response to the error, such as
   logging the cause of the error or even taking actions to isolate the
   endpoint.




Schmidt, et al.              Standards Track                   [Page 78]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   A PA-TNC Error attribute is sent instead of a SWIMA Response
   attribute when certain issues prevent the reliable creation of a
   SWIMA Response.  As such, a SWIMA-PC MUST NOT send both a PA-TNC
   Error attribute and a SWIMA Response attribute in response to a
   single SWIMA Request attribute.

   Table 9 lists the error code values for the PA-TNC Error attribute
   that are specific to the SWIMA exchange.  Error codes are shown in
   both hexadecimal and decimal format.  In all of these cases, the
   Error Code Vendor ID field MUST be set to 0x000000, corresponding to
   the IETF SMI PEN.  The error information structures for each error
   code are described in the following subsections.

   Note that a message with a SWIMA attribute might also result in an
   error condition covered by the IETF Standard PA-TNC Error Codes
   defined in Section 4.2.8 of [RFC5792].  For example, a SWIMA
   attribute might have an invalid parameter, leading to an error code
   of "Invalid Parameter".  In this case, the SWIMA-PC MUST use the
   appropriate PA-TNC Error Code value as defined in Section 4.2.8 of
   [RFC5792].































Schmidt, et al.              Standards Track                   [Page 79]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   +----------------+--------------------------------------------------+
   | Error Code     | Description                                      |
   | Value          |                                                  |
   +----------------+--------------------------------------------------+
   | 0x00000004 (4) | SWIMA_ERROR.  This indicates a fatal error       |
   |                | (i.e., an error that precludes the creation of a |
   |                | suitable response attribute) other than the      |
   |                | errors described below but still specific to the |
   |                | processing of SWIMA attributes.  The Description |
   |                | field SHOULD contain additional diagnostic       |
   |                | information.                                     |
   |                |                                                  |
   | 0x00000005 (5) | SWIMA_SUBSCRIPTION_DENIED_ERROR.  This indicates |
   |                | that the SWIMA-PC denied the SWIMA-PV's request  |
   |                | to establish a subscription.  The Description    |
   |                | field SHOULD contain additional diagnostic       |
   |                | information.                                     |
   |                |                                                  |
   | 0x00000006 (6) | SWIMA_RESPONSE_TOO_LARGE_ERROR.  This indicates  |
   |                | that the SWIMA-PC's response to the SWIMA-PV's   |
   |                | request was too large to be serviced.  The error |
   |                | information structure indicates the largest      |
   |                | possible size of a response supported by the     |
   |                | SWIMA-PC (see Section 5.15.2).  The Description  |
   |                | field SHOULD contain additional diagnostic       |
   |                | information.                                     |
   |                |                                                  |
   | 0x00000007 (7) | SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR.  This      |
   |                | indicates that the SWIMA-PC experienced an error |
   |                | while fulfilling a given subscription.  The      |
   |                | error information includes the Subscription ID   |
   |                | of the relevant subscription, as well as a       |
   |                | sub-error that describes the nature of the error |
   |                | the SWIMA-PC experienced.  The SWIMA-PC and      |
   |                | SWIMA-PV MUST treat the identified subscription  |
   |                | as cancelled.                                    |
   |                |                                                  |
   | 0x00000008 (8) | SWIMA_SUBSCRIPTION_ID_REUSE_ERROR.  This         |
   |                | indicates that the SWIMA-PC received a SWIMA     |
   |                | Request from a given SWIMA-PV where the Request  |
   |                | ID of that SWIMA Request is currently used as    |
   |                | the Subscription ID of an active subscription    |
   |                | with that SWIMA-PV.  This error does not cancel  |
   |                | the identified subscription.                     |
   +----------------+--------------------------------------------------+

                   Table 9: PA-TNC Error Codes for SWIMA




Schmidt, et al.              Standards Track                   [Page 80]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   The following subsections describe the structures present in the
   error information fields.  Note that all error structures include a
   variable-length field but do not include any fields indicating the
   length of those fields.  A length field is unnecessary because all
   other fields in the PA-TNC Error attribute are of fixed length, and
   thus the length of the variable-length field can be found by
   subtracting the size of these fixed-length fields from the PA-TNC
   Attribute Length field in the PA-TNC Attribute Header.

5.15.1.  SWIMA_ERROR, SWIMA_SUBSCRIPTION_DENIED_ERROR, and
         SWIMA_SUBSCRIPTION_ID_REUSE_ERROR Information

   The SWIMA_ERROR error code indicates that the sender (the SWIMA-PC)
   has encountered an error that is related to the processing of a SWIMA
   Request attribute but that is not covered by SWIMA error codes that
   are more specific.  The SWIMA_SUBSCRIPTION_DENIED_ERROR is used when
   the SWIMA-PV sends a request to establish a subscription or clear all
   subscriptions from the given SWIMA-PV but the SWIMA-PC is unable or
   unwilling to comply with this request.  The
   SWIMA_SUBSCRIPTION_ID_REUSE_ERROR is used when the SWIMA-PC receives
   a SWIMA Request whose Request ID duplicates a Subscription ID of an
   active subscription with the request's sender.  All of these error
   codes use the following error information structure.

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            Copy of Request ID / Subscription ID               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                Description (variable length)                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

       Figure 21: SWIMA_ERROR, SWIMA_SUBSCRIPTION_DENIED_ERROR, and
               SWIMA_SUBSCRIPTION_ID_REUSE_ERROR Information

















Schmidt, et al.              Standards Track                   [Page 81]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   +--------------+----------------------------------------------------+
   | Field        | Description                                        |
   +--------------+----------------------------------------------------+
   | Copy of      | In the case that this error condition is generated |
   | Request ID / | in direct response to a SWIMA Request attribute,   |
   | Subscription | this field MUST contain an exact copy of the       |
   | ID           | Request ID field in the SWIMA Request attribute    |
   |              | that caused this error.  In the case that the      |
   |              | attribute in question is generated in fulfillment  |
   |              | of an active subscription, this field MUST contain |
   |              | the Subscription ID of the subscription for which  |
   |              | the attribute was generated.  (This is only        |
   |              | possible if the error code is SWIMA_ERROR, as the  |
   |              | other errors are not generated by subscription     |
   |              | fulfillment.)  Note that in the case of failed     |
   |              | subscription fulfillment, the indicated error      |
   |              | appears as a sub-error for a                       |
   |              | SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR, as described |
   |              | in Section 5.15.3.                                 |
   |              |                                                    |
   | Description  | A UTF-8 [RFC3629] string describing the condition  |
   |              | that caused this error.  This field MAY be zero-   |
   |              | length.  However, senders SHOULD include some kind |
   |              | of description in all PA-TNC Error attributes with |
   |              | these error codes.  This field MUST NOT be null    |
   |              | terminated.                                        |
   +--------------+----------------------------------------------------+

        Table 10: SWIMA_ERROR, SWIMA_SUBSCRIPTION_DENIED_ERROR, and
           SWIMA_SUBSCRIPTION_ID_REUSE_ERROR Information Fields

   This error information structure is used with SWIMA_ERROR,
   SWIMA_SUBSCRIPTION_DENIED_ERROR, and
   SWIMA_SUBSCRIPTION_ID_REUSE_ERROR status codes to identify the SWIMA
   Request attribute that precipitated the error condition and to
   describe the error.  The Description field contains text describing
   the error.  The SWIMA-PC MAY encode machine-interpretable information
   in this field but SHOULD also include a human-readable description of
   the error, since the receiving SWIMA-PV might not recognize the
   SWIMA-PC's encoded information.











Schmidt, et al.              Standards Track                   [Page 82]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


5.15.2.  SWIMA_RESPONSE_TOO_LARGE_ERROR Information

   The SWIMA_RESPONSE_TOO_LARGE_ERROR error code indicates that a
   SWIMA-PC's response to a SWIMA-PV's SWIMA Request attribute was too
   large to send.

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Copy of Request ID / Subscription ID             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Maximum Allowed Size                       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Description (variable length)                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

           Figure 22: SWIMA_RESPONSE_TOO_LARGE_ERROR Information


































Schmidt, et al.              Standards Track                   [Page 83]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   +--------------+----------------------------------------------------+
   | Field        | Description                                        |
   +--------------+----------------------------------------------------+
   | Copy of      | In the case that the attribute in question is      |
   | Request ID / | generated in direct response to a SWIMA Request,   |
   | Subscription | this field MUST contain an exact copy of the       |
   | ID           | Request ID field in the SWIMA Request attribute    |
   |              | that caused this error.  In the case that the      |
   |              | attribute in question is generated in fulfillment  |
   |              | of an active subscription, this field MUST contain |
   |              | the Subscription ID of the subscription for which  |
   |              | the attribute was generated.  Note that in the     |
   |              | latter case, the SWIMA_RESPONSE_TOO_LARGE_ERROR    |
   |              | appears as a sub-error for a                       |
   |              | SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR, as described |
   |              | in Section 5.15.3.                                 |
   |              |                                                    |
   | Maximum      | This field MUST contain an unsigned integer        |
   | Allowed Size | indicating the largest permissible size, in bytes, |
   |              | of the SWIMA attribute that the SWIMA-PC is        |
   |              | currently willing to send in response to a SWIMA   |
   |              | Request attribute.                                 |
   |              |                                                    |
   | Description  | A UTF-8 [RFC3629] string describing the condition  |
   |              | that caused this error.  This field MAY be zero-   |
   |              | length.  However, senders SHOULD include some kind |
   |              | of description in all PA-TNC Error attributes with |
   |              | this error code.  This field MUST NOT be null      |
   |              | terminated.                                        |
   +--------------+----------------------------------------------------+

        Table 11: SWIMA_RESPONSE_TOO_LARGE_ERROR Information Fields

   This error structure is used with the SWIMA_RESPONSE_TOO_LARGE_ERROR
   status code to identify the SWIMA Request attribute that precipitated
   the error condition and to describe the error.  The Maximum Allowed
   Size field indicates the largest attribute the SWIMA-PC is willing to
   send in response to a SWIMA Request under the current circumstances.
   Note that under other circumstances, the SWIMA-PC might be willing to
   return larger or smaller responses than indicated (such as if the
   endpoint connects to the NEA Server using a different network
   protocol).  The other fields in this error information structure have
   the same meanings as corresponding fields in the SWIMA_ERROR and
   SWIMA_SUBSCRIPTION_DENIED_ERROR information structures.







Schmidt, et al.              Standards Track                   [Page 84]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


5.15.3.  SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR Information

   The SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR error code indicates that
   the SWIMA-PC encountered an error while fulfilling a subscription.
   The bytes after the first 4 octets duplicate a PA-TNC Error attribute
   (as described in Section 4.2.8 of PA-TNC [RFC5792]) that is used to
   identify the nature of the encountered error.

                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Subscription ID                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Reserved   |           Sub-error Code Vendor ID            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             Sub-error Code                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Sub-error Information (variable length)             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

        Figure 23: SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR Information






























Schmidt, et al.              Standards Track                   [Page 85]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   +--------------+----------------------------------------------------+
   | Field        | Description                                        |
   +--------------+----------------------------------------------------+
   | Subscription | This field MUST contain the Subscription ID of the |
   | ID           | subscription whose fulfillment caused this error.  |
   |              |                                                    |
   | Reserved     | This field MUST contain the value of the Reserved  |
   |              | field of a PA-TNC Error attribute that describes   |
   |              | the error condition encountered during             |
   |              | subscription processing.                           |
   |              |                                                    |
   | Sub-error    | This field MUST contain the value of the Error     |
   | Code Vendor  | Code Vendor ID field of a PA-TNC Error attribute   |
   | ID           | that describes the error condition encountered     |
   |              | during subscription processing.                    |
   |              |                                                    |
   | Sub-error    | This field MUST contain the value of the Error     |
   | Code         | Code field of a PA-TNC Error attribute that        |
   |              | describes the error condition encountered during   |
   |              | subscription processing.                           |
   |              |                                                    |
   | Sub-error    | This field MUST contain the value of the Error     |
   | Information  | Information field of a PA-TNC Error attribute that |
   |              | describes the error condition encountered during   |
   |              | subscription processing.                           |
   +--------------+----------------------------------------------------+

     Table 12: SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR Information Fields

   This error structure is used with the
   SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR status code.  The first 4 octets
   of this error structure contain the Subscription ID of the
   subscription that was being fulfilled when the error occurred.  The
   remaining fields of this error structure duplicate the fields of a
   PA-TNC Error attribute, referred to as the "sub-error".  The error
   code of the sub-error corresponds to the code of the error that the
   SWIMA-PC encountered while fulfilling the given subscription.  The
   sub-error MUST NOT have an error code of
   SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR.

   The SWIMA-PC sending a PA-TNC Error attribute with this error code,
   and the SWIMA-PV receiving it, MUST treat the subscription identified
   by the Subscription ID field as cancelled.  All other subscriptions
   are unaffected.







Schmidt, et al.              Standards Track                   [Page 86]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


6.  Supported Data Models

   SWIMA supports an extensible list of data models for representing and
   transmitting software inventory information.  This list of data
   models appears in the "Software Data Model Types" registry (see
   Section 10.5).  This document provides guidance for an initial set of
   data models.  Other documents might provide guidance on the use of
   new data models by SWIMA and will be referenced by extensions to the
   "Software Data Model Types" registry.

6.1.  ISO 2015 SWID Tags Using XML

   The International Organization for Standardization and the
   International Electrotechnical Commission (ISO/IEC) published the
   specification governing SWID tag construction and use
   (ISO/IEC 19770-2:2009) in 2009 [SWID09], with a revised version of
   the specification (ISO/IEC 19770-2:2015) published in 2015 [SWID15].
   Since that time, a growing number of vendors have integrated SWID
   tags into their software products.  SWID tags significantly simplify
   the task of identifying pieces of software: instead of relying on
   discovery processes that look for clues as to software presence, such
   as the presence of particular files or registry keys, vendors can use
   a readily available list of SWID tags that provides simple and
   immediate evidence as to the presence of the given piece of software.

   SWIMA has no reliance on the presence or management of SWID tags on
   an endpoint as described in the ISO 2015 SWID tag specification.
   However, as presented in the ISO 2015 SWID tag specification, the
   data model for describing software provides a robust and
   comprehensive way of describing software and is adopted here as a
   means of representing and transmitting software information.  It
   should be emphasized that the use of the ISO SWID tag data model
   makes no assumption as to whether (1) the source of the recorded
   information was, in fact, an ISO SWID tag harvested from the endpoint
   or (2) the information was created using some other source and
   normalized to the SWID format.

6.1.1.  Guidance on Normalizing Source Data to ISO 2015 SWID Tags
        Using XML

   Any record associated with this Software Data Model Type MUST conform
   to [SWID15].

   If generating a new ISO 2015 SWID tag, the software generating the
   tag MUST use a Tag Creator RegID that is associated with the
   generating software, unless this is impossible, in which case it MUST
   use the "http://invalid.unavailable" Tag Creator RegID value.  (This
   conforms to conventions for an unknown tag creator in the ISO 2015



Schmidt, et al.              Standards Track                   [Page 87]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   SWID tag specification.)  Do not use a RegID associated with any
   other party.  In particular, it is incorrect to use a Tag Creator
   RegID associated with the software being described by the tag, the
   enterprise that is using the software, or any other entity except
   that of the party that built the tool that is generating the SWID
   tag.  This reflects the requirement that the Tag Creator RegID
   identify the party that created the tag.  Moreover, any generated
   tags SHOULD conform to guidance for tag creators as provided in
   NISTIR 8060 [NIST8060], which provides additional recommendations to
   increase interoperable use of SWID tags.

6.1.2.  Guidance on Creation of Software Identifiers from ISO 2015
        SWID Tags

   A Software Identifier generated from an ISO 2015 SWID tag is
   expressed as a concatenation of the value of the Tag Creator RegID
   field and the Unique ID field.  Specifically, (1) it MUST be of the
   form TAG_CREATOR_REGID "_" "_" UNIQUE_ID and (2) it consists of the
   Tag Creator RegID and the Unique ID from the tag connected with a
   double underscore (_), without any other connecting character or
   whitespace.

6.2.  ISO 2009 SWID Tags Using XML

   As noted above, ISO's SWID tag specification provides a useful data
   model for representation of software information.  As of the writing
   of this specification, while the ISO 2015 specification is considered
   more comprehensive and addresses some issues with the ISO 2009
   specification, 2009-format SWID tags remain far more common in
   deployments.  For this reason, ISO 2009 SWID tags are included in the
   "Software Data Model Types" registry.

6.2.1.  Guidance on Normalizing Source Data to ISO 2009 SWID Tags
        Using XML

   Any record associated with this Software Data Model Type MUST conform
   to [SWID09].  Any such tag SHOULD use a UTF-8 encoding [RFC3629] but
   MUST NOT alter the existing encoding if doing so would invalidate
   digital signatures included in the tag.

   If generating a new ISO 2009 SWID tag, the software generating the
   tag MUST use a Tag Creator RegID that is associated with the
   generating software, unless this is impossible, in which case it MUST
   use "unknown", which indicates that the tag creator is unknown.
   (This conforms to conventions for an unknown tag creator in the
   ISO 2009 SWID tag specification.)  Do not use a RegID associated with
   any other party.  In particular, it is incorrect to use a Tag Creator
   RegID associated with the software being described by the tag, the



Schmidt, et al.              Standards Track                   [Page 88]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   enterprise that is using the software, or any other entity except
   that of the party that built the tool that is generating the SWID
   tag.  This reflects the requirement that the Tag Creator RegID
   identify the party that created the tag.

6.2.2.  Guidance on Creation of Software Identifiers from ISO 2009
        SWID Tags

   A Software Identifier generated from an ISO 2009 SWID tag is
   expressed as a concatenation of the value of the Tag Creator RegID
   field and the Unique ID field.  Specifically, (1) it MUST be of the
   form TAG_CREATOR_REGID "_" "_" UNIQUE_ID and (2) it consists of the
   Tag Creator RegID and the Unique ID from the tag connected with a
   double underscore (_), without any other connecting character or
   whitespace.

7.  Relationship to Other Specifications

   This specification is expected to participate in a standard NEA
   architecture.  As such, it is expected to be used in conjunction with
   the other protocols used in a NEA exchange.  In particular, SWIMA
   attributes are conveyed over PB-TNC [RFC5793], which is in turn
   conveyed over some variant of PT (either PT-TLS [RFC6876] or PT-EAP
   [RFC7171]).  These protocols have an especially important role, as
   they are responsible for ensuring that attributes defined under this
   specification are delivered reliably, securely, and to the
   appropriate party.

   It is important to note that the Product Information, Numeric
   Version, and String Version attributes defined in the PA-TNC
   specification [RFC5792] are also meant to convey information about
   installed applications and the versions thereof.  As such, there is
   some conceptual overlap between those attributes and the intent of
   this specification.  However, PA-TNC was designed to respond to very
   specific queries about specific classes of products, while SWIMA is
   able to convey a broader query, resulting in a more comprehensive set
   of information regarding an endpoint's installed software.  As such,
   this specification provides important capabilities not present in the
   PA-TNC specification.

   The NEA architecture is intended to support a broad range of
   activities and, as such, might be employed by other specifications.
   For example, requirement T-001 in the SACM Requirements document
   [RFC8248] notes that NEA can support data collection from endpoints
   within the broader SACM architecture.  (Other parts of the NEA
   architecture, which SWIMA uses, meet the other SACM data transport
   requirements.)  In the SACM architecture, a SWIMA-PV corresponds to a
   "SACM Collector" and a SWIMA-PC corresponds to a "SACM Internal



Schmidt, et al.              Standards Track                   [Page 89]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   Collector".  In the SACM architecture, SWIMA can support activities
   relating to software inventory collection.  Specifically, SWIMA
   supports the SACM "Endpoint Posture Attribute Value Collection" use
   case (Section 2.1.3 in [RFC7632]) by describing a collection
   mechanism that enables event-driven, scheduled, and ad hoc data
   collection of software inventory information.  SWIMA's flexibility
   with regard to the format of inventory data records means that it is
   compatible with virtually any data format that implements SACM's
   "Define, Publish, Query, and Retrieve Security Automation Data" use
   case (Section 2.1.1 in [RFC7632]).  This is just one example of how
   SWIMA can support broader security solution standards.  Note that
   while SWIMA can support these SACM use cases, SWIMA has no
   dependencies on the SACM architecture or any other context in which
   NEA might reasonably be applied.

8.  Security Considerations

   This section discusses some of the security threats facing SWIMA-PCs
   and SWIMA-PVs.  This section primarily notes potential issues for
   implementers to consider, although it does contain a handful of
   normative requirements to address certain security issues.  The
   issues identified below focus on capabilities specific to this
   document.  Implementers are advised to consult other relevant NEA
   specifications, particularly [RFC5209] (the NEA architecture) and
   [RFC5792] (PA-TNC), for security issues that are applicable to such
   components in general.

8.1.  Evidentiary Value of Software Inventory Evidence Records

   The degree to which an endpoint's Software Inventory Evidence
   Collection accurately reflects the endpoint's actual software load
   and any changes made to this software load is dependent on the
   accuracy of the tools used to populate and manage the Software
   Inventory Evidence Records in this collection.  While the SWIMA-PC is
   required to detect changes to an endpoint's Software Inventory
   Evidence Collection in near real time, some tools might not be
   designed to update records in the Software Inventory Evidence
   Collection in real time.  This can result in a collection that is out
   of sync with actual system state.  Moreover, tools might inaccurately
   characterize software or fail to properly record its removal.
   Finally, it is likely that there will be software on the endpoint
   that is not tracked by any source and thus is not reflected in the
   Software Inventory Evidence Collection.  Tools that implement SWIMA
   ought to be aware of these potential issues and minimize them, but
   completely eliminating such issues is likely impossible.  Users of
   collected Software Inventory Evidence Records need to understand that
   the information provided by SWIMA cannot be treated as completely
   accurate.  Nonetheless, having endpoints report this information can



Schmidt, et al.              Standards Track                   [Page 90]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   still provide useful insights into the state of the endpoint's
   software load and can alert administrators and policy tools of
   situations that require remediation.

8.2.  Sensitivity of Collected Records

   Collected software records can be sensitive in nature.  This can
   include both security sensitivities and privacy sensitivities.
   Privacy sensitivities are discussed more in Section 9.  With regard
   to security, inventory records represent a wealth of information
   about the endpoint in question, and for an adversary who does not
   already have access to the endpoint a collection of the endpoint's
   inventory records might provide many details that are useful for
   mounting an attack.  A list of the inventory records associated with
   an endpoint reveals a list of software installed on the endpoint.
   This list can be very detailed, noting specific versions and even
   patch levels; an adversary can use this information to identify
   vulnerable software and design efficacious attacks.

   The following information might also be gleaned from a collection of
   software inventory records:

   o  An inventory record might include information about where the
      product was installed on a given endpoint.  This can reveal
      details about the file organization of that endpoint that an
      attacker can utilize.

   o  An inventory record might include information about how the
      software was provided to the endpoint, who in an organization
      signs off on the package release, and who packaged the product for
      installation.  This information might be used as a starting point
      for the development of supply chain attacks.

   o  Events affecting inventory records are reported with timestamps
      indicating when each given event occurred.  This can give the
      attacker an indication of how quickly an organization distributes
      patches and updates, helping the attacker determine how long an
      attack window might remain open.

   Any consolidated software inventory is a potential risk, because such
   an inventory can provide an adversary an insight into the
   enterprise's configuration and management process.  It is recommended
   that a centralized software inventory record collection be protected
   against unauthorized access.  Mechanisms to accomplish this can
   include encrypting the data at rest, ensuring that access to the data
   is limited only to authorized individuals and processes, and other
   basic security precautions.




Schmidt, et al.              Standards Track                   [Page 91]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


8.3.  Integrity of Endpoint Records

   SWIMA-PCs maintain records of detected changes to the endpoint's
   Software Inventory Evidence Collection.  These records are used to
   respond to a SWIMA-PV's request for change events.  The SWIMA-PV
   might use a list of reported events to update its understanding of
   the endpoint's Software Inventory Evidence Collection without needing
   to receive a full inventory report from the SWIMA-PC.  For this
   reason, preserving the integrity of the SWIMA-PC's record of events
   is extremely important.  If an attacker modifies the SWIMA-PC's
   record of changes to the endpoint's Software Inventory Evidence
   Collection, this might cause the SWIMA-PV's understanding of the
   endpoint's Software Inventory Evidence Collection to differ from its
   actual state.  The results of such an attack might include leading
   the SWIMA-PV to believe that (1) absent software was present or,
   conversely, that present software was absent or (2) patches have been
   installed even if this is not the case.  Such an attack could also
   cause the SWIMA-PV to be unaware of other changes to Software
   Inventory Evidence Records.  As such, the SWIMA-PC MUST take steps to
   protect the integrity of its event records.

   In addition, records of established SWIMA-PV subscriptions also
   require protection against manipulation or corruption.  If an
   attacker is able to modify or delete records of a SWIMA-PV's
   established subscription, the SWIMA-PC might fail to correctly
   fulfill this subscription.  The SWIMA-PV would not be aware that its
   subscription was not being correctly fulfilled unless it received
   additional information that indicated a discrepancy.  For example,
   the SWIMA-PV might collect a full inventory and realize from this
   information that certain events had not been correctly reported in
   accordance with an established subscription.  For this reason, the
   SWIMA-PC MUST protect the integrity of subscription records.

8.4.  SWIMA-PC Access Permissions

   A SWIMA-PC requires sufficient permissions to collect Software
   Inventory Evidence Records from all of its supported sources, as well
   as sufficient permissions to interact with the endpoint's Posture
   Broker Client.  With regard to the former, this might require
   permissions to read the contents of directories throughout the
   filesystem.  Depending on the operating environment and other
   activities undertaken by a SWIMA-PC (or software that incorporates a
   SWIMA-PC as one of its capabilities), additional permissions might be
   required by the SWIMA-PC software.  The SWIMA-PC SHOULD NOT be
   granted permissions beyond what it needs to fulfill its duties.






Schmidt, et al.              Standards Track                   [Page 92]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


8.5.  Sanitization of Record Fields

   Not all sources of software inventory evidence are necessarily
   tightly controlled.  For example, consider a source that gathers
   .swid files from the endpoint's filesystem.  Any party could create a
   new .swid file that could be collected and turned into a Software
   Inventory Evidence Record.  As a result, it is important that the
   contents of source information not be automatically trusted.  In
   particular, tools that read source information and the Software
   Inventory Evidence Records derived therefrom, including SWIMA-PCs,
   need to be careful to sanitize input to prevent buffer overflow
   attacks, encoding attacks, and other weaknesses that might be
   exploited by an adversary who can control the contents of a record.

8.6.  PA-TNC Security Threats

   In addition to the aforementioned considerations, the SWIMA protocol
   is subject to the same security threats as other PA-TNC transactions;
   see Section 5.2 of PA-TNC [RFC5792].  These include, but are not
   limited to, attribute theft, message fabrication, attribute
   modification, attribute replay, attribute insertion, and denial of
   service.  Implementers are advised to consult the PA-TNC
   specification to better understand these security issues.

9.  Privacy Considerations

   As noted in Section 8.2, if an adversary can gain an understanding of
   the software installed on an endpoint, they can utilize this to
   launch attacks and maintain footholds on this endpoint.  For this
   reason, the NEA Server needs to ensure that adequate safeguards are
   in place to prevent exposure of collected inventory records.  For
   similar reasons, it is advisable that an endpoint only send records
   to a NEA Server that is authorized to receive this information and
   that can be trusted to safeguard this information after collection.

   In addition, software inventory information can lead to insights
   about the endpoint's primary user if that user is able to install
   software.  (Note that users might be "able" to install their own
   software even if they are not "allowed" to do so.)  This is
   especially true on endpoints that support "apps", as individual apps
   can be closely tied to specific groups or activities.  This could
   conceivably allow inferences about things such as a user's hobbies;
   the banks and other financial institutions that they use; and
   information about the user's race, sex, or sexual orientation.







Schmidt, et al.              Standards Track                   [Page 93]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   Organizations that collect software inventory information from
   endpoints ought to make sure the endpoints' users are aware of this
   collection.  In addition, organizations should be aware that a
   software inventory associated with an individual, such as the
   inventory of the individual's primary endpoint, could expose
   sensitive personal information.  For this reason, privacy safeguards
   are necessary for collected inventory information.  Such safeguards
   would require not only protection of the inventory's confidentiality
   but also appropriate access controls so that only those trained in
   relevant privacy requirements are able to view the data.

10.  IANA Considerations

   This section extends multiple existing IANA registries.
   Specifically, it extends the "PA-TNC Attribute Types" and "PA-TNC
   Error Codes" registries defined in the PA-TNC specification [RFC5792]
   and the "PA Subtypes" registry defined in the PB-TNC specification
   [RFC5793] and extended in PA-TNC.  This specification only adds
   values to these registries and does not alter how these registries
   work or are maintained.  Consult the appropriate specifications for
   details on the operations and maintenance of these registries.

   This section also defines a new IANA registry for "Software Data
   Model Types".  The structure and requirements for this registry are
   provided, as well as guidelines for reviewers adjudicating the
   addition of new entries to this registry.

10.1.  Guidance for the Designated Experts

   For the "Software Data Model Types" registry defined by this
   specification, new values are added to the registry using the
   "Specification Required" process defined in RFC 8126 [RFC8126].

   This section provides guidance to designated experts so that they may
   make decisions using a philosophy appropriate for this registry.

   Designated experts should focus on the following requirements.  All
   values in this IANA registry MUST be documented in a specification
   that is permanently and publicly available.  Values MUST also be
   useful, not harmful to the Internet, and defined in a manner that is
   clear and likely to ensure interoperability.

   Designated experts should encourage vendors to avoid defining similar
   but incompatible values and instead agree on a single value allocated
   via IETF standards.  However, it is beneficial to document existing
   practice.





Schmidt, et al.              Standards Track                   [Page 94]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   There are several ways to ensure that a specification is permanently
   and publicly available.  It may be published as an RFC.
   Alternatively, it may be published in another manner that makes it
   freely available to anyone.  However, in this latter case, the vendor
   MUST supply a copy to IANA and authorize IANA to archive this copy
   and make it freely available to all, if at some point the document
   becomes no longer freely available to all through other channels.

   Sections 10.2, 10.3, and 10.4 define a new PA Subtype, new PA-TNC
   Attribute Types, and new PA-TNC Error Codes, respectively.
   Section 10.5 provides guidance to IANA in creating and managing the
   new "Software Data Model Types" registry defined by this
   specification.

10.2.  PA Subtypes

   The following is an extension to the list of PA Subtypes provided in
   Section 7.2 of [RFC5792] and defined in the "PA Subtypes" registry in
   Section 6.3 of [RFC5793].  See <https://www.iana.org/assignments/
   pb-tnc-parameters/>.

       +-----+---------+------------------+------------------------+
       | PEN | Integer | Name             | Defining Specification |
       +-----+---------+------------------+------------------------+
       | 0   | 9       | SWIMA Attributes | RFC 8412               |
       +-----+---------+------------------+------------------------+

























Schmidt, et al.              Standards Track                   [Page 95]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


10.3.  PA-TNC Attribute Types

   Section 5.2 of this specification defines several new PA-TNC
   attributes.  The following values have been added to the "PA-TNC
   Attribute Types" registry defined in the PA-TNC specification.  Note
   that Table 1 in Section 5.2 lists these attributes in both
   hexadecimal and decimal format.  The decimal values given in that
   table are identical to those provided here.  Note also that Table 1
   includes an entry for the PA-TNC Error attribute, but the IANA
   information associated with the PA-TNC Error attribute is already
   defined in the PA-TNC specification and is not reproduced here.

   +-----+---------+----------------------------+----------------------+
   | PEN | Integer | Name                       | Defining             |
   |     |         |                            | Specification        |
   +-----+---------+----------------------------+----------------------+
   | 0   | 13      | SWIMA Request              | RFC 8412             |
   |     |         |                            |                      |
   | 0   | 14      | Software Identifier        | RFC 8412             |
   |     |         | Inventory                  |                      |
   |     |         |                            |                      |
   | 0   | 15      | Software Identifier Events | RFC 8412             |
   |     |         |                            |                      |
   | 0   | 16      | Software Inventory         | RFC 8412             |
   |     |         |                            |                      |
   | 0   | 17      | Software Events            | RFC 8412             |
   |     |         |                            |                      |
   | 0   | 18      | Subscription Status        | RFC 8412             |
   |     |         | Request                    |                      |
   |     |         |                            |                      |
   | 0   | 19      | Subscription Status        | RFC 8412             |
   |     |         | Response                   |                      |
   |     |         |                            |                      |
   | 0   | 20      | Source Metadata Request    | RFC 8412             |
   |     |         |                            |                      |
   | 0   | 21      | Source Metadata Response   | RFC 8412             |
   +-----+---------+----------------------------+----------------------+














Schmidt, et al.              Standards Track                   [Page 96]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


10.4.  PA-TNC Error Codes

   Section 5.15 of this specification defines several new PA-TNC Error
   Codes.  The following values have been added to the "PA-TNC Error
   Codes" registry defined in the PA-TNC specification.  Note that
   Table 9 in Section 5.15 lists these codes in both hexadecimal and
   decimal format.  The decimal values given in that table are identical
   to those provided here.

+-----+---------+--------------------------------------+---------------+
| PEN | Integer | Name                                 | Defining      |
|     |         |                                      | Specification |
+-----+---------+--------------------------------------+---------------+
| 0   | 4       | SWIMA_ERROR                          | RFC 8412      |
|     |         |                                      |               |
| 0   | 5       | SWIMA_SUBSCRIPTION_DENIED_ERROR      | RFC 8412      |
|     |         |                                      |               |
| 0   | 6       | SWIMA_RESPONSE_TOO_LARGE_ERROR       | RFC 8412      |
|     |         |                                      |               |
| 0   | 7       | SWIMA_SUBSCRIPTION_FULFILLMENT_ERROR | RFC 8412      |
|     |         |                                      |               |
| 0   | 8       | SWIMA_SUBSCRIPTION_ID_REUSE_ERROR    | RFC 8412      |
+-----+---------+--------------------------------------+---------------+

10.5.  Software Data Model Types

   For the "Software Data Model Types" registry
   (<https://www.iana.org/assignments/pa-tnc-parameters/
   #software-data-model-types>, each entry should include a
   human-readable name, an SMI PEN, a decimal integer value between 0
   and 2^8-1 (inclusive), and a reference to the specification where the
   use of this data model is defined.  This referenced specification
   needs to provide both a description of the format used by the data
   model and the procedures by which Software Identifiers are derived
   from a record expressed using this data model.  Note that a
   specification that just defines the data model structure and its use
   is generally not sufficient, as it would likely lack the procedures
   for constructing a Software Identifier.  This is why the table below
   uses the SWIMA standard for ISO SWID tags as the reference for the
   use of ISO SWID tags and does not reference the ISO SWID tag
   specification.










Schmidt, et al.              Standards Track                   [Page 97]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   The following entries for this registry are defined in this document.
   They are the initial entries in the "Software Data Model Types"
   registry.  Additional entries to this registry are added following
   the "Specification Required" policy defined in [RFC8126], following
   the guidelines in Section 10.1.

   +-----+---------+-----------------------------+---------------------+
   | PEN | Integer | Name                        | Defining            |
   |     |         |                             | Specification       |
   +-----+---------+-----------------------------+---------------------+
   | 0   | 0       | ISO 2015 SWID tags using    | RFC 8412            |
   |     |         | XML                         |                     |
   |     |         |                             |                     |
   | 0   | 1       | ISO 2009 SWID tags using    | RFC 8412            |
   |     |         | XML                         |                     |
   |     |         |                             |                     |
   | 0   | 192-255 | Reserved for local          | N/A                 |
   |     |         | enterprise use              |                     |
   +-----+---------+-----------------------------+---------------------+

11.  References

11.1.  Normative References

   [NIST8060]
              Waltermire, D., Cheikes, B., Feldman, L., and G. Witte,
              "Guidelines for the Creation of Interoperable Software
              Identification (SWID) Tags", DOI 10.6028/NIST.IR.8060,
              April 2016, <https://nvlpubs.nist.gov/nistpubs/ir/2016/
              NIST.IR.8060.pdf>.

   [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>.

   [RFC3339]  Klyne, G. and C. Newman, "Date and Time on the Internet:
              Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002,
              <https://www.rfc-editor.org/info/rfc3339>.

   [RFC3629]  Yergeau, F., "UTF-8, a transformation format of
              ISO 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629,
              November 2003, <https://www.rfc-editor.org/info/rfc3629>.

   [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>.



Schmidt, et al.              Standards Track                   [Page 98]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   [RFC5198]  Klensin, J. and M. Padlipsky, "Unicode Format for Network
              Interchange", RFC 5198, DOI 10.17487/RFC5198, March 2008,
              <https://www.rfc-editor.org/info/rfc5198>.

   [RFC5792]  Sangster, P. and K. Narayan, "PA-TNC: A Posture Attribute
              (PA) Protocol Compatible with Trusted Network Connect
              (TNC)", RFC 5792, DOI 10.17487/RFC5792, March 2010,
              <https://www.rfc-editor.org/info/rfc5792>.

   [RFC8089]  Kerwin, M., "The "file" URI Scheme", RFC 8089,
              DOI 10.17487/RFC8089, February 2017,
              <https://www.rfc-editor.org/info/rfc8089>.

   [RFC8126]  Cotton, M., Leiba, B., and T. Narten, "Guidelines for
              Writing an IANA Considerations Section in RFCs", BCP 26,
              RFC 8126, DOI 10.17487/RFC8126, June 2017,
              <https://www.rfc-editor.org/info/rfc8126>.

   [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>.

   [SWID09]   The International Organization for Standardization/
              International Electrotechnical Commission, "Information
              technology - Software asset management - Part 2: Software
              identification tag", ISO/IEC 19770-2:2009, November 2009,
              <https://www.iso.org/standard/53670.html>.

   [SWID15]   The International Organization for Standardization/
              International Electrotechnical Commission, "Information
              technology - Software asset management - Part 2: Software
              identification tag", ISO/IEC 19770-2:2015, October 2015,
              <https://www.iso.org/standard/65666.html>.

11.2.  Informative References

   [RFC5209]  Sangster, P., Khosravi, H., Mani, M., Narayan, K., and J.
              Tardo, "Network Endpoint Assessment (NEA): Overview and
              Requirements", RFC 5209, DOI 10.17487/RFC5209, June 2008,
              <https://www.rfc-editor.org/info/rfc5209>.

   [RFC5793]  Sahita, R., Hanna, S., Hurst, R., and K. Narayan, "PB-TNC:
              A Posture Broker (PB) Protocol Compatible with Trusted
              Network Connect (TNC)", RFC 5793, DOI 10.17487/RFC5793,
              March 2010, <https://www.rfc-editor.org/info/rfc5793>.





Schmidt, et al.              Standards Track                   [Page 99]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


   [RFC6876]  Sangster, P., Cam-Winget, N., and J. Salowey, "A Posture
              Transport Protocol over TLS (PT-TLS)", RFC 6876,
              DOI 10.17487/RFC6876, February 2013,
              <https://www.rfc-editor.org/info/rfc6876>.

   [RFC7171]  Cam-Winget, N. and P. Sangster, "PT-EAP: Posture Transport
              (PT) Protocol for Extensible Authentication Protocol (EAP)
              Tunnel Methods", RFC 7171, DOI 10.17487/RFC7171, May 2014,
              <https://www.rfc-editor.org/info/rfc7171>.

   [RFC7632]  Waltermire, D. and D. Harrington, "Endpoint Security
              Posture Assessment: Enterprise Use Cases", RFC 7632,
              DOI 10.17487/RFC7632, September 2015,
              <https://www.rfc-editor.org/info/rfc7632>.

   [RFC8248]  Cam-Winget, N. and L. Lorenzin, "Security Automation and
              Continuous Monitoring (SACM) Requirements", RFC 8248,
              DOI 10.17487/RFC8248, September 2017,
              <https://www.rfc-editor.org/info/rfc8248>.
































Schmidt, et al.              Standards Track                  [Page 100]
^L
RFC 8412                    SWIMA for PA-TNC                   July 2018


Authors' Addresses

   Charles Schmidt
   The MITRE Corporation
   202 Burlington Road
   Bedford, MA  01730
   United States of America

   Email: cmschmidt@mitre.org


   Daniel Haynes
   The MITRE Corporation
   202 Burlington Road
   Bedford, MA  01730
   United States of America

   Email: dhaynes@mitre.org


   Chris Coffin
   The MITRE Corporation
   202 Burlington Road
   Bedford, MA  01730
   United States of America

   Email: ccoffin@mitre.org

   David Waltermire
   National Institute of Standards and Technology
   100 Bureau Drive
   Gaithersburg, Maryland
   United States of America

   Email: david.waltermire@nist.gov


   Jessica Fitzgerald-McKay
   United States National Security Agency
   9800 Savage Road
   Ft. Meade, Maryland
   United States of America

   Email: jmfitz2@radium.ncsc.mil







Schmidt, et al.              Standards Track                  [Page 101]
^L