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
|
<!DOCTYPE html>
<html lang="en" class="RFC">
<head>
<meta charset="utf-8">
<meta content="Common,Latin" name="scripts">
<meta content="initial-scale=1.0" name="viewport">
<title>RFC 8816: Secure Telephone Identity Revisited (STIR) Out-of-Band Architecture and Use Cases</title>
<meta content="Eric Rescorla" name="author">
<meta content="Jon Peterson" name="author">
<meta content="
The Personal Assertion Token (PASSporT) format defines
a token that can be carried by signaling protocols, including SIP,
to cryptographically attest the identity of callers.
However, not all telephone calls use Internet signaling protocols,
and some calls use them for only part of their signaling
path, while some cannot reliably deliver SIP header fields end-to-end.
This document describes use cases that require the delivery of
PASSporT objects outside of the signaling path, and defines
architectures and semantics to provide
this functionality.
" name="description">
<meta content="xml2rfc 3.5.0" name="generator">
<meta content="SIP" name="keyword">
<meta content="8816" name="rfc.number">
<!-- Generator version information:
xml2rfc 3.5.0
Python 3.6.10
appdirs 1.4.4
ConfigArgParse 1.2.3
google-i18n-address 2.3.5
html5lib 1.0.1
intervaltree 3.0.2
Jinja2 2.11.2
kitchen 1.2.6
lxml 4.4.2
pycairo 1.19.0
pycountry 19.8.18
pyflakes 2.1.1
PyYAML 5.3.1
requests 2.22.0
setuptools 40.6.2
six 1.14.0
WeasyPrint 51
-->
<link href="rfc8816.xml" rel="alternate" type="application/rfc+xml">
<link href="#copyright" rel="license">
<style type="text/css">/*
NOTE: Changes at the bottom of this file overrides some earlier settings.
Once the style has stabilized and has been adopted as an official RFC style,
this can be consolidated so that style settings occur only in one place, but
for now the contents of this file consists first of the initial CSS work as
provided to the RFC Formatter (xml2rfc) work, followed by itemized and
commented changes found necssary during the development of the v3
formatters.
*/
/* fonts */
@import url('https://fonts.googleapis.com/css?family=Noto+Sans'); /* Sans-serif */
@import url('https://fonts.googleapis.com/css?family=Noto+Serif'); /* Serif (print) */
@import url('https://fonts.googleapis.com/css?family=Roboto+Mono'); /* Monospace */
@viewport {
zoom: 1.0;
width: extend-to-zoom;
}
@-ms-viewport {
width: extend-to-zoom;
zoom: 1.0;
}
/* general and mobile first */
html {
}
body {
max-width: 90%;
margin: 1.5em auto;
color: #222;
background-color: #fff;
font-size: 14px;
font-family: 'Noto Sans', Arial, Helvetica, sans-serif;
line-height: 1.6;
scroll-behavior: smooth;
}
.ears {
display: none;
}
/* headings */
#title, h1, h2, h3, h4, h5, h6 {
margin: 1em 0 0.5em;
font-weight: bold;
line-height: 1.3;
}
#title {
clear: both;
border-bottom: 1px solid #ddd;
margin: 0 0 0.5em 0;
padding: 1em 0 0.5em;
}
.author {
padding-bottom: 4px;
}
h1 {
font-size: 26px;
margin: 1em 0;
}
h2 {
font-size: 22px;
margin-top: -20px; /* provide offset for in-page anchors */
padding-top: 33px;
}
h3 {
font-size: 18px;
margin-top: -36px; /* provide offset for in-page anchors */
padding-top: 42px;
}
h4 {
font-size: 16px;
margin-top: -36px; /* provide offset for in-page anchors */
padding-top: 42px;
}
h5, h6 {
font-size: 14px;
}
#n-copyright-notice {
border-bottom: 1px solid #ddd;
padding-bottom: 1em;
margin-bottom: 1em;
}
/* general structure */
p {
padding: 0;
margin: 0 0 1em 0;
text-align: left;
}
div, span {
position: relative;
}
div {
margin: 0;
}
.alignRight.art-text {
background-color: #f9f9f9;
border: 1px solid #eee;
border-radius: 3px;
padding: 1em 1em 0;
margin-bottom: 1.5em;
}
.alignRight.art-text pre {
padding: 0;
}
.alignRight {
margin: 1em 0;
}
.alignRight > *:first-child {
border: none;
margin: 0;
float: right;
clear: both;
}
.alignRight > *:nth-child(2) {
clear: both;
display: block;
border: none;
}
svg {
display: block;
}
.alignCenter.art-text {
background-color: #f9f9f9;
border: 1px solid #eee;
border-radius: 3px;
padding: 1em 1em 0;
margin-bottom: 1.5em;
}
.alignCenter.art-text pre {
padding: 0;
}
.alignCenter {
margin: 1em 0;
}
.alignCenter > *:first-child {
border: none;
/* this isn't optimal, but it's an existence proof. PrinceXML doesn't
support flexbox yet.
*/
display: table;
margin: 0 auto;
}
/* lists */
ol, ul {
padding: 0;
margin: 0 0 1em 2em;
}
ol ol, ul ul, ol ul, ul ol {
margin-left: 1em;
}
li {
margin: 0 0 0.25em 0;
}
.ulCompact li {
margin: 0;
}
ul.empty, .ulEmpty {
list-style-type: none;
}
ul.empty li, .ulEmpty li {
margin-top: 0.5em;
}
ul.compact, .ulCompact,
ol.compact, .olCompact {
line-height: 100%;
margin: 0 0 0 2em;
}
/* definition lists */
dl {
}
dl > dt {
float: left;
margin-right: 1em;
}
/*
dl.nohang > dt {
float: none;
}
*/
dl > dd {
margin-bottom: .8em;
min-height: 1.3em;
}
dl.compact > dd, .dlCompact > dd {
margin-bottom: 0em;
}
dl > dd > dl {
margin-top: 0.5em;
margin-bottom: 0em;
}
/* links */
a {
text-decoration: none;
}
a[href] {
color: #22e; /* Arlen: WCAG 2019 */
}
a[href]:hover {
background-color: #f2f2f2;
}
figcaption a[href],
a[href].selfRef {
color: #222;
}
/* XXX probably not this:
a.selfRef:hover {
background-color: transparent;
cursor: default;
} */
/* Figures */
tt, code, pre, code {
background-color: #f9f9f9;
font-family: 'Roboto Mono', monospace;
}
pre {
border: 1px solid #eee;
margin: 0;
padding: 1em;
}
img {
max-width: 100%;
}
figure {
margin: 0;
}
figure blockquote {
margin: 0.8em 0.4em 0.4em;
}
figcaption {
font-style: italic;
margin: 0 0 1em 0;
}
@media screen {
pre {
overflow-x: auto;
max-width: 100%;
max-width: calc(100% - 22px);
}
}
/* aside, blockquote */
aside, blockquote {
margin-left: 0;
padding: 1.2em 2em;
}
blockquote {
background-color: #f9f9f9;
color: #111; /* Arlen: WCAG 2019 */
border: 1px solid #ddd;
border-radius: 3px;
margin: 1em 0;
}
cite {
display: block;
text-align: right;
font-style: italic;
}
/* tables */
table {
width: 100%;
margin: 0 0 1em;
border-collapse: collapse;
border: 1px solid #eee;
}
th, td {
text-align: left;
vertical-align: top;
padding: 0.5em 0.75em;
}
th {
text-align: left;
background-color: #e9e9e9;
}
tr:nth-child(2n+1) > td {
background-color: #f5f5f5;
}
table caption {
font-style: italic;
margin: 0;
padding: 0;
text-align: left;
}
table p {
/* XXX to avoid bottom margin on table row signifiers. If paragraphs should
be allowed within tables more generally, it would be far better to select on a class. */
margin: 0;
}
/* pilcrow */
a.pilcrow {
color: #666; /* Arlen: AHDJ 2019 */
text-decoration: none;
visibility: hidden;
user-select: none;
-ms-user-select: none;
-o-user-select:none;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-webkit-touch-callout: none;
}
@media screen {
aside:hover > a.pilcrow,
p:hover > a.pilcrow,
blockquote:hover > a.pilcrow,
div:hover > a.pilcrow,
li:hover > a.pilcrow,
pre:hover > a.pilcrow {
visibility: visible;
}
a.pilcrow:hover {
background-color: transparent;
}
}
/* misc */
hr {
border: 0;
border-top: 1px solid #eee;
}
.bcp14 {
font-variant: small-caps;
}
.role {
font-variant: all-small-caps;
}
/* info block */
#identifiers {
margin: 0;
font-size: 0.9em;
}
#identifiers dt {
width: 3em;
clear: left;
}
#identifiers dd {
float: left;
margin-bottom: 0;
}
#identifiers .authors .author {
display: inline-block;
margin-right: 1.5em;
}
#identifiers .authors .org {
font-style: italic;
}
/* The prepared/rendered info at the very bottom of the page */
.docInfo {
color: #666; /* Arlen: WCAG 2019 */
font-size: 0.9em;
font-style: italic;
margin-top: 2em;
}
.docInfo .prepared {
float: left;
}
.docInfo .prepared {
float: right;
}
/* table of contents */
#toc {
padding: 0.75em 0 2em 0;
margin-bottom: 1em;
}
nav.toc ul {
margin: 0 0.5em 0 0;
padding: 0;
list-style: none;
}
nav.toc li {
line-height: 1.3em;
margin: 0.75em 0;
padding-left: 1.2em;
text-indent: -1.2em;
}
/* references */
.references dt {
text-align: right;
font-weight: bold;
min-width: 7em;
}
.references dd {
margin-left: 8em;
overflow: auto;
}
.refInstance {
margin-bottom: 1.25em;
}
.references .ascii {
margin-bottom: 0.25em;
}
/* index */
.index ul {
margin: 0 0 0 1em;
padding: 0;
list-style: none;
}
.index ul ul {
margin: 0;
}
.index li {
margin: 0;
text-indent: -2em;
padding-left: 2em;
padding-bottom: 5px;
}
.indexIndex {
margin: 0.5em 0 1em;
}
.index a {
font-weight: 700;
}
/* make the index two-column on all but the smallest screens */
@media (min-width: 600px) {
.index ul {
-moz-column-count: 2;
-moz-column-gap: 20px;
}
.index ul ul {
-moz-column-count: 1;
-moz-column-gap: 0;
}
}
/* authors */
address.vcard {
font-style: normal;
margin: 1em 0;
}
address.vcard .nameRole {
font-weight: 700;
margin-left: 0;
}
address.vcard .label {
font-family: "Noto Sans",Arial,Helvetica,sans-serif;
margin: 0.5em 0;
}
address.vcard .type {
display: none;
}
.alternative-contact {
margin: 1.5em 0 1em;
}
hr.addr {
border-top: 1px dashed;
margin: 0;
color: #ddd;
max-width: calc(100% - 16px);
}
/* temporary notes */
.rfcEditorRemove::before {
position: absolute;
top: 0.2em;
right: 0.2em;
padding: 0.2em;
content: "The RFC Editor will remove this note";
color: #9e2a00; /* Arlen: WCAG 2019 */
background-color: #ffd; /* Arlen: WCAG 2019 */
}
.rfcEditorRemove {
position: relative;
padding-top: 1.8em;
background-color: #ffd; /* Arlen: WCAG 2019 */
border-radius: 3px;
}
.cref {
background-color: #ffd; /* Arlen: WCAG 2019 */
padding: 2px 4px;
}
.crefSource {
font-style: italic;
}
/* alternative layout for smaller screens */
@media screen and (max-width: 1023px) {
body {
padding-top: 2em;
}
#title {
padding: 1em 0;
}
h1 {
font-size: 24px;
}
h2 {
font-size: 20px;
margin-top: -18px; /* provide offset for in-page anchors */
padding-top: 38px;
}
#identifiers dd {
max-width: 60%;
}
#toc {
position: fixed;
z-index: 2;
top: 0;
right: 0;
padding: 0;
margin: 0;
background-color: inherit;
border-bottom: 1px solid #ccc;
}
#toc h2 {
margin: -1px 0 0 0;
padding: 4px 0 4px 6px;
padding-right: 1em;
min-width: 190px;
font-size: 1.1em;
text-align: right;
background-color: #444;
color: white;
cursor: pointer;
}
#toc h2::before { /* css hamburger */
float: right;
position: relative;
width: 1em;
height: 1px;
left: -164px;
margin: 6px 0 0 0;
background: white none repeat scroll 0 0;
box-shadow: 0 4px 0 0 white, 0 8px 0 0 white;
content: "";
}
#toc nav {
display: none;
padding: 0.5em 1em 1em;
overflow: auto;
height: calc(100vh - 48px);
border-left: 1px solid #ddd;
}
}
/* alternative layout for wide screens */
@media screen and (min-width: 1024px) {
body {
max-width: 724px;
margin: 42px auto;
padding-left: 1.5em;
padding-right: 29em;
}
#toc {
position: fixed;
top: 42px;
right: 42px;
width: 25%;
margin: 0;
padding: 0 1em;
z-index: 1;
}
#toc h2 {
border-top: none;
border-bottom: 1px solid #ddd;
font-size: 1em;
font-weight: normal;
margin: 0;
padding: 0.25em 1em 1em 0;
}
#toc nav {
display: block;
height: calc(90vh - 84px);
bottom: 0;
padding: 0.5em 0 0;
overflow: auto;
}
img { /* future proofing */
max-width: 100%;
height: auto;
}
}
/* pagination */
@media print {
body {
width: 100%;
}
p {
orphans: 3;
widows: 3;
}
#n-copyright-notice {
border-bottom: none;
}
#toc, #n-introduction {
page-break-before: always;
}
#toc {
border-top: none;
padding-top: 0;
}
figure, pre {
page-break-inside: avoid;
}
figure {
overflow: scroll;
}
h1, h2, h3, h4, h5, h6 {
page-break-after: avoid;
}
h2+*, h3+*, h4+*, h5+*, h6+* {
page-break-before: avoid;
}
pre {
white-space: pre-wrap;
word-wrap: break-word;
font-size: 10pt;
}
table {
border: 1px solid #ddd;
}
td {
border-top: 1px solid #ddd;
}
}
/* This is commented out here, as the string-set: doesn't
pass W3C validation currently */
/*
.ears thead .left {
string-set: ears-top-left content();
}
.ears thead .center {
string-set: ears-top-center content();
}
.ears thead .right {
string-set: ears-top-right content();
}
.ears tfoot .left {
string-set: ears-bottom-left content();
}
.ears tfoot .center {
string-set: ears-bottom-center content();
}
.ears tfoot .right {
string-set: ears-bottom-right content();
}
*/
@page :first {
padding-top: 0;
@top-left {
content: normal;
border: none;
}
@top-center {
content: normal;
border: none;
}
@top-right {
content: normal;
border: none;
}
}
@page {
size: A4;
margin-bottom: 45mm;
padding-top: 20px;
/* The follwing is commented out here, but set appropriately by in code, as
the content depends on the document */
/*
@top-left {
content: 'Internet-Draft';
vertical-align: bottom;
border-bottom: solid 1px #ccc;
}
@top-left {
content: string(ears-top-left);
vertical-align: bottom;
border-bottom: solid 1px #ccc;
}
@top-center {
content: string(ears-top-center);
vertical-align: bottom;
border-bottom: solid 1px #ccc;
}
@top-right {
content: string(ears-top-right);
vertical-align: bottom;
border-bottom: solid 1px #ccc;
}
@bottom-left {
content: string(ears-bottom-left);
vertical-align: top;
border-top: solid 1px #ccc;
}
@bottom-center {
content: string(ears-bottom-center);
vertical-align: top;
border-top: solid 1px #ccc;
}
@bottom-right {
content: '[Page ' counter(page) ']';
vertical-align: top;
border-top: solid 1px #ccc;
}
*/
}
/* Changes introduced to fix issues found during implementation */
/* Make sure links are clickable even if overlapped by following H* */
a {
z-index: 2;
}
/* Separate body from document info even without intervening H1 */
section {
clear: both;
}
/* Top align author divs, to avoid names without organization dropping level with org names */
.author {
vertical-align: top;
}
/* Leave room in document info to show Internet-Draft on one line */
#identifiers dt {
width: 8em;
}
/* Don't waste quite as much whitespace between label and value in doc info */
#identifiers dd {
margin-left: 1em;
}
/* Give floating toc a background color (needed when it's a div inside section */
#toc {
background-color: white;
}
/* Make the collapsed ToC header render white on gray also when it's a link */
@media screen and (max-width: 1023px) {
#toc h2 a,
#toc h2 a:link,
#toc h2 a:focus,
#toc h2 a:hover,
#toc a.toplink,
#toc a.toplink:hover {
color: white;
background-color: #444;
text-decoration: none;
}
}
/* Give the bottom of the ToC some whitespace */
@media screen and (min-width: 1024px) {
#toc {
padding: 0 0 1em 1em;
}
}
/* Style section numbers with more space between number and title */
.section-number {
padding-right: 0.5em;
}
/* prevent monospace from becoming overly large */
tt, code, pre, code {
font-size: 95%;
}
/* Fix the height/width aspect for ascii art*/
pre.sourcecode,
.art-text pre {
line-height: 1.12;
}
/* Add styling for a link in the ToC that points to the top of the document */
a.toplink {
float: right;
margin-right: 0.5em;
}
/* Fix the dl styling to match the RFC 7992 attributes */
dl > dt,
dl.dlParallel > dt {
float: left;
margin-right: 1em;
}
dl.dlNewline > dt {
float: none;
}
/* Provide styling for table cell text alignment */
table td.text-left,
table th.text-left {
text-align: left;
}
table td.text-center,
table th.text-center {
text-align: center;
}
table td.text-right,
table th.text-right {
text-align: right;
}
/* Make the alternative author contact informatio look less like just another
author, and group it closer with the primary author contact information */
.alternative-contact {
margin: 0.5em 0 0.25em 0;
}
address .non-ascii {
margin: 0 0 0 2em;
}
/* With it being possible to set tables with alignment
left, center, and right, { width: 100%; } does not make sense */
table {
width: auto;
}
/* Avoid reference text that sits in a block with very wide left margin,
because of a long floating dt label.*/
.references dd {
overflow: visible;
}
/* Control caption placement */
caption {
caption-side: bottom;
}
/* Limit the width of the author address vcard, so names in right-to-left
script don't end up on the other side of the page. */
address.vcard {
max-width: 30em;
margin-right: auto;
}
/* For address alignment dependent on LTR or RTL scripts */
address div.left {
text-align: left;
}
address div.right {
text-align: right;
}
/* Provide table alignment support. We can't use the alignX classes above
since they do unwanted things with caption and other styling. */
table.right {
margin-left: auto;
margin-right: 0;
}
table.center {
margin-left: auto;
margin-right: auto;
}
table.left {
margin-left: 0;
margin-right: auto;
}
/* Give the table caption label the same styling as the figcaption */
caption a[href] {
color: #222;
}
@media print {
.toplink {
display: none;
}
/* avoid overwriting the top border line with the ToC header */
#toc {
padding-top: 1px;
}
/* Avoid page breaks inside dl and author address entries */
.vcard {
page-break-inside: avoid;
}
}
/* Tweak the bcp14 keyword presentation */
.bcp14 {
font-variant: small-caps;
font-weight: bold;
font-size: 0.9em;
}
/* Tweak the invisible space above H* in order not to overlay links in text above */
h2 {
margin-top: -18px; /* provide offset for in-page anchors */
padding-top: 31px;
}
h3 {
margin-top: -18px; /* provide offset for in-page anchors */
padding-top: 24px;
}
h4 {
margin-top: -18px; /* provide offset for in-page anchors */
padding-top: 24px;
}
/* Float artwork pilcrow to the right */
@media screen {
.artwork a.pilcrow {
display: block;
line-height: 0.7;
margin-top: 0.15em;
}
}
/* Make pilcrows on dd visible */
@media screen {
dd:hover > a.pilcrow {
visibility: visible;
}
}
/* Make the placement of figcaption match that of a table's caption
by removing the figure's added bottom margin */
.alignLeft.art-text,
.alignCenter.art-text,
.alignRight.art-text {
margin-bottom: 0;
}
.alignLeft,
.alignCenter,
.alignRight {
margin: 1em 0 0 0;
}
/* In print, the pilcrow won't show on hover, so prevent it from taking up space,
possibly even requiring a new line */
@media print {
a.pilcrow {
display: none;
}
}
/* Styling for the external metadata */
div#external-metadata {
background-color: #eee;
padding: 0.5em;
margin-bottom: 0.5em;
display: none;
}
div#internal-metadata {
padding: 0.5em; /* to match the external-metadata padding */
}
/* Styling for title RFC Number */
h1#rfcnum {
clear: both;
margin: 0 0 -1em;
padding: 1em 0 0 0;
}
/* Make .olPercent look the same as <ol><li> */
dl.olPercent > dd {
margin-bottom: 0.25em;
min-height: initial;
}
/* Give aside some styling to set it apart */
aside {
border-left: 1px solid #ddd;
margin: 1em 0 1em 2em;
padding: 0.2em 2em;
}
aside > dl,
aside > ol,
aside > ul,
aside > table,
aside > p {
margin-bottom: 0.5em;
}
/* Additional page break settings */
@media print {
figcaption, table caption {
page-break-before: avoid;
}
}
/* Font size adjustments for print */
@media print {
body { font-size: 10pt; line-height: normal; max-width: 96%; }
h1 { font-size: 1.72em; padding-top: 1.5em; } /* 1*1.2*1.2*1.2 */
h2 { font-size: 1.44em; padding-top: 1.5em; } /* 1*1.2*1.2 */
h3 { font-size: 1.2em; padding-top: 1.5em; } /* 1*1.2 */
h4 { font-size: 1em; padding-top: 1.5em; }
h5, h6 { font-size: 1em; margin: initial; padding: 0.5em 0 0.3em; }
}
/* Sourcecode margin in print, when there's no pilcrow */
@media print {
.artwork,
.sourcecode {
margin-bottom: 1em;
}
}
/* Avoid narrow tables forcing too narrow table captions, which may render badly */
table {
min-width: 20em;
}
/* ol type a */
ol.type-a { list-style-type: lower-alpha; }
ol.type-A { list-style-type: upper-alpha; }
ol.type-i { list-style-type: lower-roman; }
ol.type-I { list-style-type: lower-roman; }
/* Apply the print table and row borders in general, on request from the RPC,
and increase the contrast between border and odd row background sligthtly */
table {
border: 1px solid #ddd;
}
td {
border-top: 1px solid #ddd;
}
tr:nth-child(2n+1) > td {
background-color: #f8f8f8;
}
/* Use style rules to govern display of the TOC. */
@media screen and (max-width: 1023px) {
#toc nav { display: none; }
#toc.active nav { display: block; }
}
/* Add support for keepWithNext */
.keepWithNext {
break-after: avoid-page;
break-after: avoid-page;
}
/* Add support for keepWithPrevious */
.keepWithPrevious {
break-before: avoid-page;
}
/* Change the approach to avoiding breaks inside artwork etc. */
figure, pre, table, .artwork, .sourcecode {
break-before: avoid-page;
break-after: auto;
}
/* Avoid breaks between <dt> and <dd> */
dl {
break-before: auto;
break-inside: auto;
}
dt {
break-before: auto;
break-after: avoid-page;
}
dd {
break-before: avoid-page;
break-after: auto;
orphans: 3;
widows: 3
}
span.break, dd.break {
margin-bottom: 0;
min-height: 0;
break-before: auto;
break-inside: auto;
break-after: auto;
}
/* Undo break-before ToC */
@media print {
#toc {
break-before: auto;
}
}
/* Text in compact lists should not get extra bottim margin space,
since that would makes the list not compact */
ul.compact p, .ulCompact p,
ol.compact p, .olCompact p {
margin: 0;
}
/* But the list as a whole needs the extra space at the end */
section ul.compact,
section .ulCompact,
section ol.compact,
section .olCompact {
margin-bottom: 1em; /* same as p not within ul.compact etc. */
}
/* The tt and code background above interferes with for instance table cell
backgrounds. Changed to something a bit more selective. */
tt, code {
background-color: transparent;
}
p tt, p code, li tt, li code {
background-color: #f8f8f8;
}
/* Tweak the pre margin -- 0px doesn't come out well */
pre {
margin-top: 0.5px;
}
/* Tweak the comact list text */
ul.compact, .ulCompact,
ol.compact, .olCompact,
dl.compact, .dlCompact {
line-height: normal;
}
/* Don't add top margin for nested lists */
li > ul, li > ol, li > dl,
dd > ul, dd > ol, dd > dl,
dl > dd > dl {
margin-top: initial;
}
/* Elements that should not be rendered on the same line as a <dt> */
/* This should match the element list in writer.text.TextWriter.render_dl() */
dd > div.artwork:first-child,
dd > aside:first-child,
dd > figure:first-child,
dd > ol:first-child,
dd > div:first-child > pre.sourcecode,
dd > table:first-child,
dd > ul:first-child {
clear: left;
}
/* fix for weird browser behaviour when <dd/> is empty */
dt+dd:empty::before{
content: "\00a0";
}
</style>
<link href="rfc-local.css" rel="stylesheet" type="text/css">
<link href="https://dx.doi.org/10.17487/rfc8816" rel="alternate">
<link href="urn:issn:2070-1721" rel="alternate">
<link href="https://datatracker.ietf.org/doc/draft-ietf-stir-oob-07" rel="prev">
</head>
<body>
<script src="https://www.rfc-editor.org/js/metadata.min.js"></script>
<table class="ears">
<thead><tr>
<td class="left">RFC 8816</td>
<td class="center">STIR Out-of-Band</td>
<td class="right">February 2021</td>
</tr></thead>
<tfoot><tr>
<td class="left">Rescorla & Peterson</td>
<td class="center">Informational</td>
<td class="right">[Page]</td>
</tr></tfoot>
</table>
<div id="external-metadata" class="document-information"></div>
<div id="internal-metadata" class="document-information">
<dl id="identifiers">
<dt class="label-stream">Stream:</dt>
<dd class="stream">Internet Engineering Task Force (IETF)</dd>
<dt class="label-rfc">RFC:</dt>
<dd class="rfc"><a href="https://www.rfc-editor.org/rfc/rfc8816" class="eref">8816</a></dd>
<dt class="label-category">Category:</dt>
<dd class="category">Informational</dd>
<dt class="label-published">Published:</dt>
<dd class="published">
<time datetime="2021-02" class="published">February 2021</time>
</dd>
<dt class="label-issn">ISSN:</dt>
<dd class="issn">2070-1721</dd>
<dt class="label-authors">Authors:</dt>
<dd class="authors">
<div class="author">
<div class="author-name">E. Rescorla</div>
<div class="org">Mozilla</div>
</div>
<div class="author">
<div class="author-name">J. Peterson</div>
<div class="org">Neustar</div>
</div>
</dd>
</dl>
</div>
<h1 id="rfcnum">RFC 8816</h1>
<h1 id="title">Secure Telephone Identity Revisited (STIR) Out-of-Band Architecture and Use Cases</h1>
<section id="section-abstract">
<h2 id="abstract"><a href="#abstract" class="selfRef">Abstract</a></h2>
<p id="section-abstract-1">The Personal Assertion Token (PASSporT) format defines
a token that can be carried by signaling protocols, including SIP,
to cryptographically attest the identity of callers.
However, not all telephone calls use Internet signaling protocols,
and some calls use them for only part of their signaling
path, while some cannot reliably deliver SIP header fields end-to-end.
This document describes use cases that require the delivery of
PASSporT objects outside of the signaling path, and defines
architectures and semantics to provide
this functionality.<a href="#section-abstract-1" class="pilcrow">¶</a></p>
</section>
<div id="status-of-memo">
<section id="section-boilerplate.1">
<h2 id="name-status-of-this-memo">
<a href="#name-status-of-this-memo" class="section-name selfRef">Status of This Memo</a>
</h2>
<p id="section-boilerplate.1-1">
This document is not an Internet Standards Track specification; it is
published for informational purposes.<a href="#section-boilerplate.1-1" class="pilcrow">¶</a></p>
<p id="section-boilerplate.1-2">
This document is a product of the Internet Engineering Task Force
(IETF). It represents the consensus of the IETF community. It has
received public review and has been approved for publication by the
Internet Engineering Steering Group (IESG). Not all documents
approved by the IESG are candidates for any level of Internet
Standard; see Section 2 of RFC 7841.<a href="#section-boilerplate.1-2" class="pilcrow">¶</a></p>
<p id="section-boilerplate.1-3">
Information about the current status of this document, any
errata, and how to provide feedback on it may be obtained at
<span><a href="https://www.rfc-editor.org/info/rfc8816">https://www.rfc-editor.org/info/rfc8816</a></span>.<a href="#section-boilerplate.1-3" class="pilcrow">¶</a></p>
</section>
</div>
<div id="copyright">
<section id="section-boilerplate.2">
<h2 id="name-copyright-notice">
<a href="#name-copyright-notice" class="section-name selfRef">Copyright Notice</a>
</h2>
<p id="section-boilerplate.2-1">
Copyright (c) 2021 IETF Trust and the persons identified as the
document authors. All rights reserved.<a href="#section-boilerplate.2-1" class="pilcrow">¶</a></p>
<p id="section-boilerplate.2-2">
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(<span><a href="https://trustee.ietf.org/license-info">https://trustee.ietf.org/license-info</a></span>) 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.<a href="#section-boilerplate.2-2" class="pilcrow">¶</a></p>
</section>
</div>
<div id="toc">
<section id="section-toc.1">
<a href="#" onclick="scroll(0,0)" class="toplink">▲</a><h2 id="name-table-of-contents">
<a href="#name-table-of-contents" class="section-name selfRef">Table of Contents</a>
</h2>
<nav class="toc"><ul class="ulEmpty compact toc">
<li class="ulEmpty compact toc" id="section-toc.1-1.1">
<p id="section-toc.1-1.1.1" class="keepWithNext"><a href="#section-1" class="xref">1</a>. <a href="#name-introduction" class="xref">Introduction</a><a href="#section-toc.1-1.1.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.2">
<p id="section-toc.1-1.2.1" class="keepWithNext"><a href="#section-2" class="xref">2</a>. <a href="#name-terminology" class="xref">Terminology</a><a href="#section-toc.1-1.2.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.3">
<p id="section-toc.1-1.3.1" class="keepWithNext"><a href="#section-3" class="xref">3</a>. <a href="#name-operating-environments" class="xref">Operating Environments</a><a href="#section-toc.1-1.3.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.4">
<p id="section-toc.1-1.4.1"><a href="#section-4" class="xref">4</a>. <a href="#name-dataflows" class="xref">Dataflows</a><a href="#section-toc.1-1.4.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.5">
<p id="section-toc.1-1.5.1"><a href="#section-5" class="xref">5</a>. <a href="#name-use-cases" class="xref">Use Cases</a><a href="#section-toc.1-1.5.1" class="pilcrow">¶</a></p>
<ul class="ulEmpty compact toc">
<li class="ulEmpty compact toc" id="section-toc.1-1.5.2.1">
<p id="section-toc.1-1.5.2.1.1"><a href="#section-5.1" class="xref">5.1</a>. <a href="#name-case-1-voip-to-pstn-call" class="xref">Case 1: VoIP to PSTN Call</a><a href="#section-toc.1-1.5.2.1.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.5.2.2">
<p id="section-toc.1-1.5.2.2.1"><a href="#section-5.2" class="xref">5.2</a>. <a href="#name-case-2-two-smart-pstn-endpo" class="xref">Case 2: Two Smart PSTN Endpoints</a><a href="#section-toc.1-1.5.2.2.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.5.2.3">
<p id="section-toc.1-1.5.2.3.1"><a href="#section-5.3" class="xref">5.3</a>. <a href="#name-case-3-pstn-to-voip-call" class="xref">Case 3: PSTN to VoIP Call</a><a href="#section-toc.1-1.5.2.3.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.5.2.4">
<p id="section-toc.1-1.5.2.4.1"><a href="#section-5.4" class="xref">5.4</a>. <a href="#name-case-4-gateway-out-of-band" class="xref">Case 4: Gateway Out-of-Band</a><a href="#section-toc.1-1.5.2.4.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.5.2.5">
<p id="section-toc.1-1.5.2.5.1"><a href="#section-5.5" class="xref">5.5</a>. <a href="#name-case-5-enterprise-call-cent" class="xref">Case 5: Enterprise Call Center</a><a href="#section-toc.1-1.5.2.5.1" class="pilcrow">¶</a></p>
</li>
</ul>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.6">
<p id="section-toc.1-1.6.1"><a href="#section-6" class="xref">6</a>. <a href="#name-storing-and-retrieving-pass" class="xref">Storing and Retrieving PASSporTs</a><a href="#section-toc.1-1.6.1" class="pilcrow">¶</a></p>
<ul class="ulEmpty compact toc">
<li class="ulEmpty compact toc" id="section-toc.1-1.6.2.1">
<p id="section-toc.1-1.6.2.1.1"><a href="#section-6.1" class="xref">6.1</a>. <a href="#name-storage" class="xref">Storage</a><a href="#section-toc.1-1.6.2.1.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.6.2.2">
<p id="section-toc.1-1.6.2.2.1"><a href="#section-6.2" class="xref">6.2</a>. <a href="#name-retrieval" class="xref">Retrieval</a><a href="#section-toc.1-1.6.2.2.1" class="pilcrow">¶</a></p>
</li>
</ul>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.7">
<p id="section-toc.1-1.7.1"><a href="#section-7" class="xref">7</a>. <a href="#name-solution-architecture" class="xref">Solution Architecture</a><a href="#section-toc.1-1.7.1" class="pilcrow">¶</a></p>
<ul class="ulEmpty compact toc">
<li class="ulEmpty compact toc" id="section-toc.1-1.7.2.1">
<p id="section-toc.1-1.7.2.1.1"><a href="#section-7.1" class="xref">7.1</a>. <a href="#name-credentials-and-phone-numbe" class="xref">Credentials and Phone Numbers</a><a href="#section-toc.1-1.7.2.1.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.7.2.2">
<p id="section-toc.1-1.7.2.2.1"><a href="#section-7.2" class="xref">7.2</a>. <a href="#name-call-flow" class="xref">Call Flow</a><a href="#section-toc.1-1.7.2.2.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.7.2.3">
<p id="section-toc.1-1.7.2.3.1"><a href="#section-7.3" class="xref">7.3</a>. <a href="#name-security-analysis" class="xref">Security Analysis</a><a href="#section-toc.1-1.7.2.3.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.7.2.4">
<p id="section-toc.1-1.7.2.4.1"><a href="#section-7.4" class="xref">7.4</a>. <a href="#name-substitution-attacks" class="xref">Substitution Attacks</a><a href="#section-toc.1-1.7.2.4.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.7.2.5">
<p id="section-toc.1-1.7.2.5.1"><a href="#section-7.5" class="xref">7.5</a>. <a href="#name-rate-control-for-cps-storag" class="xref">Rate Control for CPS Storage</a><a href="#section-toc.1-1.7.2.5.1" class="pilcrow">¶</a></p>
</li>
</ul>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.8">
<p id="section-toc.1-1.8.1"><a href="#section-8" class="xref">8</a>. <a href="#name-authentication-and-verifica" class="xref">Authentication and Verification Service Behavior for Out-of-Band</a><a href="#section-toc.1-1.8.1" class="pilcrow">¶</a></p>
<ul class="ulEmpty compact toc">
<li class="ulEmpty compact toc" id="section-toc.1-1.8.2.1">
<p id="section-toc.1-1.8.2.1.1"><a href="#section-8.1" class="xref">8.1</a>. <a href="#name-authentication-service-as" class="xref">Authentication Service (AS)</a><a href="#section-toc.1-1.8.2.1.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.8.2.2">
<p id="section-toc.1-1.8.2.2.1"><a href="#section-8.2" class="xref">8.2</a>. <a href="#name-verification-service-vs" class="xref">Verification Service (VS)</a><a href="#section-toc.1-1.8.2.2.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.8.2.3">
<p id="section-toc.1-1.8.2.3.1"><a href="#section-8.3" class="xref">8.3</a>. <a href="#name-gateway-placement-services" class="xref">Gateway Placement Services</a><a href="#section-toc.1-1.8.2.3.1" class="pilcrow">¶</a></p>
</li>
</ul>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.9">
<p id="section-toc.1-1.9.1"><a href="#section-9" class="xref">9</a>. <a href="#name-example-https-interface-to-" class="xref">Example HTTPS Interface to the CPS</a><a href="#section-toc.1-1.9.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.10">
<p id="section-toc.1-1.10.1"><a href="#section-10" class="xref">10</a>. <a href="#name-cps-discovery" class="xref">CPS Discovery</a><a href="#section-toc.1-1.10.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.11">
<p id="section-toc.1-1.11.1"><a href="#section-11" class="xref">11</a>. <a href="#name-encryption-key-lookup" class="xref">Encryption Key Lookup</a><a href="#section-toc.1-1.11.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.12">
<p id="section-toc.1-1.12.1"><a href="#section-12" class="xref">12</a>. <a href="#name-iana-considerations" class="xref">IANA Considerations</a><a href="#section-toc.1-1.12.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.13">
<p id="section-toc.1-1.13.1"><a href="#section-13" class="xref">13</a>. <a href="#name-privacy-considerations" class="xref">Privacy Considerations</a><a href="#section-toc.1-1.13.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.14">
<p id="section-toc.1-1.14.1"><a href="#section-14" class="xref">14</a>. <a href="#name-security-considerations" class="xref">Security Considerations</a><a href="#section-toc.1-1.14.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.15">
<p id="section-toc.1-1.15.1"><a href="#section-15" class="xref">15</a>. <a href="#name-informative-references" class="xref">Informative References</a><a href="#section-toc.1-1.15.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.16">
<p id="section-toc.1-1.16.1"><a href="#section-appendix.a" class="xref"></a><a href="#name-acknowledgments" class="xref">Acknowledgments</a><a href="#section-toc.1-1.16.1" class="pilcrow">¶</a></p>
</li>
<li class="ulEmpty compact toc" id="section-toc.1-1.17">
<p id="section-toc.1-1.17.1"><a href="#section-appendix.b" class="xref"></a><a href="#name-authors-addresses" class="xref">Authors' Addresses</a><a href="#section-toc.1-1.17.1" class="pilcrow">¶</a></p>
</li>
</ul>
</nav>
</section>
</div>
<section id="section-1">
<h2 id="name-introduction">
<a href="#section-1" class="section-number selfRef">1. </a><a href="#name-introduction" class="section-name selfRef">Introduction</a>
</h2>
<p id="section-1-1">The STIR problem statement <span>[<a href="#RFC7340" class="xref">RFC7340</a>]</span>
describes widespread problems enabled by impersonation in the telephone network,
including illegal robocalling, voicemail hacking, and swatting.
As telephone services are increasingly migrating onto the Internet,
and using Voice over IP (VoIP) protocols such as <span><a href="#RFC3261" class="xref">SIP</a> [<a href="#RFC3261" class="xref">RFC3261</a>]</span>,
it is necessary for these protocols to support stronger identity mechanisms to prevent impersonation.
For example, <span>[<a href="#RFC8224" class="xref">RFC8224</a>]</span> defines a SIP Identity header field
capable of carrying <span><a href="#RFC8225" class="xref">PASSporT objects</a> [<a href="#RFC8225" class="xref">RFC8225</a>]</span>
in SIP as a means to cryptographically attest that the originator of a
telephone call is authorized to use the calling party number (or, for native SIP cases,
SIP URI) associated with the originator of the call.<a href="#section-1-1" class="pilcrow">¶</a></p>
<p id="section-1-2">Not all telephone calls use SIP today, however, and even those that do use SIP do not always carry SIP signaling end-to-end.
Calls from telephone numbers still routinely traverse the Public Switched Telephone Network (PSTN) at some
point. Broadly, calls fall into one of three categories:<a href="#section-1-2" class="pilcrow">¶</a></p>
<ol start="1" type="1" class="normal type-1" id="section-1-3">
<li id="section-1-3.1">
One or both of the endpoints is actually a PSTN endpoint.<a href="#section-1-3.1" class="pilcrow">¶</a>
</li>
<li id="section-1-3.2">Both of the endpoints are non-PSTN (SIP, Jingle, etc.) but the call transits the PSTN at some point.<a href="#section-1-3.2" class="pilcrow">¶</a>
</li>
<li id="section-1-3.3">Non-PSTN calls that do not transit the PSTN at all (such as native SIP end-to-end calls).<a href="#section-1-3.3" class="pilcrow">¶</a>
</li>
</ol>
<p id="section-1-4">The first two categories represent the majority of telephone calls associated with problems like illegal robocalling: many robocalls today originate on the Internet but terminate at PSTN endpoints.
However, the core network elements that operate the PSTN are legacy devices that
are unlikely to be upgradable at this point to support an in-band authentication system.
As such, those devices largely cannot be modified to pass signatures originating on the Internet -- or indeed any in-band signaling
data -- intact. Even if fields for tunneling arbitrary data can be found in traditional PSTN signaling, in some cases legacy elements would strip the signatures from those fields; in
others, they might damage them to the point where they cannot be
verified. For those first two categories above, any in-band authentication scheme does not
seem practical in the current environment.<a href="#section-1-4" class="pilcrow">¶</a></p>
<p id="section-1-5">While the core network of the PSTN remains fixed, the endpoints of
the telephone network are becoming increasingly programmable and
sophisticated. Landline "plain old telephone service" deployments,
especially in the developed world, are shrinking, and increasingly
being replaced by three classes of intelligent devices: smart
phones, IP Private Branch Exchanges (PBXs), and terminal adapters. All three are general
purpose computers, and typically all three have Internet access as
well as access to the PSTN; they may be used for residential, mobile, or enterprise telephone services.
Additionally, various kinds of gateways increasingly front for
deployments of legacy PBX and PSTN switches. All of this provides a potential avenue for
building an authentication system that implements stronger identity while leaving PSTN systems intact.<a href="#section-1-5" class="pilcrow">¶</a></p>
<p id="section-1-6"> This capability also provides an ideal transitional technology while in-band STIR adoption is ramping up. It permits early adopters to use the technology even when intervening network
elements are not yet STIR-aware, and through various kinds of gateways, it may allow providers with a significant PSTN investment to still secure their calls with STIR.<a href="#section-1-6" class="pilcrow">¶</a></p>
<p id="section-1-7">The techniques described in this document therefore build on the
<span><a href="#RFC8225" class="xref">PASSporT</a> [<a href="#RFC8225" class="xref">RFC8225</a>]</span> mechanism and the work of <span>[<a href="#RFC8224" class="xref">RFC8224</a>]</span> to describe a way that
a PASSporT object created in the originating network of a call can reach the terminating network even when it cannot be carried end-to-end in-band in the call signaling. This relies on
a new service defined in this document called a Call Placement Service (CPS) that permits the PASSporT object to be stored during call processing and retrieved for verification purposes.<a href="#section-1-7" class="pilcrow">¶</a></p>
<p id="section-1-8">Potential implementors should note that this document merely defines the operating environments in which this
out-of-band STIR mechanism is intended to operate. It provides use cases, gives a broad description of the components, and a potential solution architecture.
Various environments may have their own security requirements: a public deployment of out-of-band STIR faces far greater challenges than a constrained intra-network deployment.
To flesh out the storage and retrieval of PASSporTs in the CPS within this
context, this document includes a strawman protocol suitable for that purpose. Deploying this framework in any given environment
would require additional specification outside the scope of this document.<a href="#section-1-8" class="pilcrow">¶</a></p>
</section>
<section id="section-2">
<h2 id="name-terminology">
<a href="#section-2" class="section-number selfRef">2. </a><a href="#name-terminology" class="section-name selfRef">Terminology</a>
</h2>
<p id="section-2-1">
The key words "<span class="bcp14">MUST</span>", "<span class="bcp14">MUST NOT</span>", "<span class="bcp14">REQUIRED</span>", "<span class="bcp14">SHALL</span>", "<span class="bcp14">SHALL NOT</span>", "<span class="bcp14">SHOULD</span>", "<span class="bcp14">SHOULD NOT</span>", "<span class="bcp14">RECOMMENDED</span>", "<span class="bcp14">NOT RECOMMENDED</span>",
"<span class="bcp14">MAY</span>", and "<span class="bcp14">OPTIONAL</span>" in this document are to be interpreted as
described in BCP 14 <span>[<a href="#RFC2119" class="xref">RFC2119</a>]</span> <span>[<a href="#RFC8174" class="xref">RFC8174</a>]</span>
when, and only when, they appear in all capitals, as shown here.<a href="#section-2-1" class="pilcrow">¶</a></p>
</section>
<section id="section-3">
<h2 id="name-operating-environments">
<a href="#section-3" class="section-number selfRef">3. </a><a href="#name-operating-environments" class="section-name selfRef">Operating Environments</a>
</h2>
<p id="section-3-1">This section describes the environments in which the proposed out-of-band STIR mechanism is intended to operate. In the simplest setting, Alice
calls Bob, and her call is routed through some set of gateways and/or the PSTN
that do not support end-to-end delivery of STIR. Both Alice
and Bob have smart devices that can access the Internet (perhaps enterprise devices, or even end-user ones), but they do not have
a clear telephone signaling connection between them: Alice cannot inject any data into
signaling that Bob can read, with the exception of the asserted destination and origination
E.164 numbers. The calling party number might originate from her own device or from the network. These numbers are effectively the only data that can be used for coordination between the endpoints.<a href="#section-3-1" class="pilcrow">¶</a></p>
<div class="artwork art-text alignLeft" id="section-3-2">
<pre>
+---------+
/ \
+--- +---+
+----------+ / \ +----------+
| | | Gateways | | |
| Alice |<----->| and/or |<----->| Bob |
| (caller) | | PSTN | | (callee) |
+----------+ \ / +----------+
+--- +---+
\ /
+---------+
</pre><a href="#section-3-2" class="pilcrow">¶</a>
</div>
<p id="section-3-3">In a more complicated setting, Alice and/or Bob may not have a smart or
programmable device, but instead just a traditional telephone. However, one or both of them are behind a STIR-aware gateway that can participate in out-of-band coordination, as shown below:<a href="#section-3-3" class="pilcrow">¶</a></p>
<div class="artwork art-text alignLeft" id="section-3-4">
<pre>
+---------+
/ \
+--- +---+
+----------+ +--+ / \ +--+ +----------+
| | | | | Gateways | | | | |
| Alice |<-|GW|->| and/or |<-|GW|->| Bob |
| (caller) | | | | PSTN | | | | (callee) |
+----------+ +--+ \ / +--+ +----------+
+--- +---+
\ /
+---------+
</pre><a href="#section-3-4" class="pilcrow">¶</a>
</div>
<p id="section-3-5">In such a case, Alice might have an analog (e.g., PSTN) connection to her
gateway or switch that is responsible for her identity. Similarly, the gateway
would verify Alice's identity, generate the right calling party number
information, and provide that number to Bob using ordinary
Plain Old Telephone Service (POTS) mechanisms.<a href="#section-3-5" class="pilcrow">¶</a></p>
</section>
<div id="data">
<section id="section-4">
<h2 id="name-dataflows">
<a href="#section-4" class="section-number selfRef">4. </a><a href="#name-dataflows" class="section-name selfRef">Dataflows</a>
</h2>
<p id="section-4-1">Because in these operating environments, endpoints cannot pass cryptographic information to one another directly
through signaling, any solution must
involve some rendezvous mechanism to allow endpoints to communicate.
We call this rendezvous service a Call Placement Service (CPS), a service where a record of call placement,
in this case a PASSporT, can be stored for future retrieval. In
principle, this service could communicate any information, but minimally we
expect it to include a full-form PASSporT that attests
the caller, callee, and the time of the call. The callee can use the
existence of a PASSporT for a given incoming call as rough validation of
the asserted origin of that call. (See <a href="#lookup" class="xref">Section 11</a> for limitations of
this design.)<a href="#section-4-1" class="pilcrow">¶</a></p>
<p id="section-4-2">This architecture does not mandate that any particular sort
of entity operate a CPS or mandate any means to discover a CPS. A CPS
could be run internally within a network or made publicly available.
One or more CPSes could be run by a carrier, as repositories for PASSporTs
for calls sent to its customers, or a CPS could be built into an enterprise
PBX or even a smartphone. To the degree possible, it is
specified here generically as an idea that may have applicability to a variety of STIR deployments.<a href="#section-4-2" class="pilcrow">¶</a></p>
<p id="section-4-3">There are roughly two plausible dataflow architectures for the CPS:<a href="#section-4-3" class="pilcrow">¶</a></p>
<ol start="1" type="1" class="normal type-1" id="section-4-4">
<li id="section-4-4.1">The callee registers with the CPS. When the caller wishes to
place a call to the callee, it sends the PASSporT to the CPS, which immediately
forwards it to the callee.<a href="#section-4-4.1" class="pilcrow">¶</a>
</li>
<li id="section-4-4.2">The caller stores the PASSporT with the CPS at the time of call
placement. When the callee receives the call, it contacts the CPS
and retrieves the PASSporT.<a href="#section-4-4.2" class="pilcrow">¶</a>
</li>
</ol>
<p id="section-4-5">While the first architecture is roughly isomorphic to current VoIP
protocols, it shares their drawbacks. Specifically, the callee must
maintain a full-time connection to the CPS to serve as a notification
channel. This comes with the usual networking costs to the callee
and is especially problematic for mobile endpoints. Indeed, if the endpoints had the capabilities
to implement such an architecture, they could surely just use SIP or some other
protocol to set up a secure session; even if the media were going through the traditional PSTN, a
"shadow" SIP session could convey the PASSporT. Thus, we focus
on the second architecture in which the PSTN incoming call serves as
the notification channel, and the callee can then contact the CPS to
retrieve the PASSporT. In specialized environments, for example, a call center that receives a large volume of
incoming calls that originated in the PSTN, the notification channel approach might be viable.<a href="#section-4-5" class="pilcrow">¶</a></p>
</section>
</div>
<div id="uses">
<section id="section-5">
<h2 id="name-use-cases">
<a href="#section-5" class="section-number selfRef">5. </a><a href="#name-use-cases" class="section-name selfRef">Use Cases</a>
</h2>
<p id="section-5-1">The following are the motivating use cases for this mechanism. Bear in mind that,
just as in <span>[<a href="#RFC8224" class="xref">RFC8224</a>]</span>, there may be multiple Identity header fields in a single SIP
INVITE, so there may be multiple PASSporTs in this out-of-band mechanism associated with a single call. For example, a SIP user agent might create a PASSporT for a call with an end-user
credential, and as the call exits the originating administrative domain,
the network authentication service might create its own PASSporT for the same call. As such, these use cases may overlap
in the processing of a single call.<a href="#section-5-1" class="pilcrow">¶</a></p>
<div id="case-ip-pstn">
<section id="section-5.1">
<h3 id="name-case-1-voip-to-pstn-call">
<a href="#section-5.1" class="section-number selfRef">5.1. </a><a href="#name-case-1-voip-to-pstn-call" class="section-name selfRef">Case 1: VoIP to PSTN Call</a>
</h3>
<p id="section-5.1-1">A call originates in a SIP environment in a STIR-aware administrative domain. The local authentication service for that administrative domain creates a PASSporT that is carried
in band in the call per <span>[<a href="#RFC8224" class="xref">RFC8224</a>]</span>. The call is routed out of the originating administrative domain and reaches a gateway to the PSTN.
Eventually, the call will terminate on a mobile smartphone that supports this out-of-band mechanism.<a href="#section-5.1-1" class="pilcrow">¶</a></p>
<p id="section-5.1-2">In this use case, the originating authentication service
can store the PASSporT with the appropriate CPS (per the practices of
<a href="#cps" class="xref">Section 10</a>) for the target telephone number
as a fallback in case SIP signaling will not reach end-to-end. When
the destination mobile smartphone receives the call over the PSTN, it
consults the CPS and discovers a PASSporT from the originating telephone number waiting for it.
It uses this PASSporT to verify the calling party number.<a href="#section-5.1-2" class="pilcrow">¶</a></p>
</section>
</div>
<div id="case-pstn-pstn-gw">
<section id="section-5.2">
<h3 id="name-case-2-two-smart-pstn-endpo">
<a href="#section-5.2" class="section-number selfRef">5.2. </a><a href="#name-case-2-two-smart-pstn-endpo" class="section-name selfRef">Case 2: Two Smart PSTN Endpoints</a>
</h3>
<p id="section-5.2-1">A call originates with an enterprise PBX that has both
Internet access and a built-in gateway to the PSTN, which communicates
through traditional telephone signaling protocols.
The PBX immediately routes the call to the PSTN, but before it does,
it provisions a PASSporT on the CPS associated with the target telephone number.<a href="#section-5.2-1" class="pilcrow">¶</a></p>
<p id="section-5.2-2">After normal PSTN routing, the call lands on a smart mobile handset that supports the STIR out-of-band mechanism. It queries the appropriate CPS over the Internet to determine if a call has been placed to it
by a STIR-aware device. It finds the PASSporT provisioned by the
enterprise PBX and uses it to verify the calling party number.<a href="#section-5.2-2" class="pilcrow">¶</a></p>
</section>
</div>
<div id="case-pstn-ip">
<section id="section-5.3">
<h3 id="name-case-3-pstn-to-voip-call">
<a href="#section-5.3" class="section-number selfRef">5.3. </a><a href="#name-case-3-pstn-to-voip-call" class="section-name selfRef">Case 3: PSTN to VoIP Call</a>
</h3>
<p id="section-5.3-1">A call originates with an enterprise PBX that has both
Internet access and a built-in gateway to the PSTN. It will immediately
route the call to the PSTN, but before it does, it provisions
a PASSporT with the CPS associated with the target telephone number.
However, it turns out that the call will eventually route through
the PSTN to an Internet gateway, which will translate this into a SIP
call and deliver it to an administrative domain with a STIR verification service.<a href="#section-5.3-1" class="pilcrow">¶</a></p>
<p id="section-5.3-2">In this case, there are two subcases for how the PASSporT
might be retrieved. In subcase 1, the Internet gateway that receives
the call from the PSTN could query the appropriate CPS to determine
if the original caller created and provisioned a PASSporT for this call. If so,
it can retrieve the PASSporT and, when it creates a SIP INVITE for
this call, add a corresponding Identity header field per
<span>[<a href="#RFC8224" class="xref">RFC8224</a>]</span>. When the SIP INVITE reaches
the destination administrative domain, it will be able to verify the
PASSporT normally. Note that to avoid discrepancies with the Date
header field value, only a full-form PASSporT should be used for this purpose. In
subcase 2, the gateway does not retrieve the PASSporT itself, but
instead the verification service at the destination administrative
domain does so. Subcase 1 would perhaps be valuable for deployments where
the destination administrative domain supports in-band STIR but not out-of-band STIR.<a href="#section-5.3-2" class="pilcrow">¶</a></p>
</section>
</div>
<div id="case-gateways">
<section id="section-5.4">
<h3 id="name-case-4-gateway-out-of-band">
<a href="#section-5.4" class="section-number selfRef">5.4. </a><a href="#name-case-4-gateway-out-of-band" class="section-name selfRef">Case 4: Gateway Out-of-Band</a>
</h3>
<p id="section-5.4-1">A call originates in the SIP world in a STIR-aware administrative domain.
The local authentication service for that administrative domain creates a PASSporT that is carried
in band in the call per <span>[<a href="#RFC8224" class="xref">RFC8224</a>]</span>. The call is routed
out of the originating administrative domain and eventually reaches a gateway to the PSTN.<a href="#section-5.4-1" class="pilcrow">¶</a></p>
<p id="section-5.4-2">In this case, the originating authentication service does not support the out-of-band mechanism, so instead the gateway to the PSTN extracts the PASSporT from the SIP request and provisions it to the CPS. (When the call reaches the gateway to the PSTN, the gateway might first check the CPS to see if a PASSporT object had already been provisioned for this call, and only provision a PASSporT if none is present).<a href="#section-5.4-2" class="pilcrow">¶</a></p>
<p id="section-5.4-3">Ultimately, the call may terminate on the PSTN or be routed back to a SIP environment. In the former case, perhaps the destination endpoint queries the CPS to retrieve the PASSporT provisioned by the first gateway. If the call ultimately returns to a SIP environment, it might be the gateway from the PSTN back to the Internet that retrieves the PASSporT from the CPS and attaches it to the new SIP INVITE it creates, or it might be the terminating administrative domain's verification service that checks the CPS when an INVITE arrives with no Identity header field. Either way, the PASSporT can survive the gap in SIP coverage caused by the PSTN leg of the call.<a href="#section-5.4-3" class="pilcrow">¶</a></p>
</section>
</div>
<div id="case-enterprise">
<section id="section-5.5">
<h3 id="name-case-5-enterprise-call-cent">
<a href="#section-5.5" class="section-number selfRef">5.5. </a><a href="#name-case-5-enterprise-call-cent" class="section-name selfRef">Case 5: Enterprise Call Center</a>
</h3>
<p id="section-5.5-1">A call originates from a mobile user, and a STIR authentication service operated by their carrier creates a PASSporT for the call. As the carrier forwards the call via SIP, it attaches the PASSporT to the SIP call with an Identity header field. As a fallback in case the call will not go end-to-end over SIP, the carrier also stores the PASSporT in a CPS.<a href="#section-5.5-1" class="pilcrow">¶</a></p>
<p id="section-5.5-2">The call is then routed over SIP for a time, before it
transitions to the PSTN and ultimately is handled by a legacy PBX at a
high-volume call center. The call center supports the out-of-band service,
and has a high-volume interface to a CPS to retrieve PASSporTs for incoming
calls; agents at the call center use a general purpose computer to manage
inbound calls and can receive STIR notifications through it. When the PASSporT
arrives at the CPS, it is sent through a subscription/notification interface
to a system that can correlate incoming calls with valid PASSporTs. The call
center agent sees that a valid call from the originating number has arrived.<a href="#section-5.5-2" class="pilcrow">¶</a></p>
</section>
</div>
</section>
</div>
<div id="authz">
<section id="section-6">
<h2 id="name-storing-and-retrieving-pass">
<a href="#section-6" class="section-number selfRef">6. </a><a href="#name-storing-and-retrieving-pass" class="section-name selfRef">Storing and Retrieving PASSporTs</a>
</h2>
<p id="section-6-1">The use cases show a variety of entities accessing the CPS to
store and retrieve PASSporTs. The question of how the CPS authorizes the
storage and retrieval of PASSporTs is thus a key design decision in the architecture.
The STIR architecture assumes that service providers and, in some cases,
end-user devices will have credentials suitable for attesting authority
over telephone numbers per <span>[<a href="#RFC8226" class="xref">RFC8226</a>]</span>.
These credentials provide the most obvious way that a CPS can authorize
the storage and retrieval of PASSporTs. However, as use cases 3, 4, and 5
in <a href="#uses" class="xref">Section 5</a> show, it may sometimes make sense
for the entity storing or retrieving PASSporTs to be an intermediary rather
than a device associated with either the originating or terminating side of
a call; those intermediaries often would not have access to STIR
credentials covering the telephone numbers in question. Requiring authorization
based on a credential to store PASSporTs is therefore undesirable, though
potentially acceptable if sufficient steps are taken to mitigate any privacy
risk of leaking data.<a href="#section-6-1" class="pilcrow">¶</a></p>
<p id="section-6-2">It is an explicit design goal of this mechanism to minimize
the potential privacy exposure of using a CPS. Ideally, the out-of-band
mechanism should not result in a worse privacy situation than in-band
STIR <span>[<a href="#RFC8224" class="xref">RFC8224</a>]</span>: for in-band, we might say
that a SIP entity is authorized to receive a PASSporT if it is an intermediate
or final target of the routing of a SIP request. As the originator of a
call cannot necessarily predict the routing path a call will follow, an
out-of-band mechanism could conceivably even improve on the privacy story.<a href="#section-6-2" class="pilcrow">¶</a></p>
<p id="section-6-3">Broadly, the architecture recommended here thus is one focused
on permitting any entity to store encrypted PASSporTs at the CPS, indexed
under the called number. PASSporTs will be encrypted with a public key
associated with the called number, so these PASSporTs may safely be retrieved
by any entity because only holders of the corresponding private key will be
able to decrypt the PASSporT. This also prevents the CPS itself from
learning the contents of PASSporTs, and thus metadata about calls in
progress, which makes the CPS a less attractive target for pervasive
monitoring (see <span>[<a href="#RFC7258" class="xref">RFC7258</a>]</span>). As a first
step, transport-level security can provide confidentiality from eavesdroppers
for both the storing and retrieval of PASSporTs. To bolster the privacy story,
to prevent denial-of-service flooding of the CPS, and to complicate traffic
analysis, a few additional mechanisms are also recommended below.<a href="#section-6-3" class="pilcrow">¶</a></p>
<div id="stor">
<section id="section-6.1">
<h3 id="name-storage">
<a href="#section-6.1" class="section-number selfRef">6.1. </a><a href="#name-storage" class="section-name selfRef">Storage</a>
</h3>
<p id="section-6.1-1">There are a few dimensions to authorizing the storage of PASSporTs.
Encrypting PASSporTs prior to storage entails that a CPS has no way to tell
if a PASSporT is valid; it simply conveys encrypted blocks that it cannot
access itself and can make no authorization decision based on the PASSporT
contents. There is certainly no prospect for the CPS to verify the PASSporTs itself.<a href="#section-6.1-1" class="pilcrow">¶</a></p>
<p id="section-6.1-2">Note that this architecture requires clients that store PASSporTs
to have access to an encryption key associated with the intended called party
to be used to encrypt the PASSporT. Discovering this key requires the existence
of a key lookup service (see <a href="#lookup" class="xref">Section 11</a>),
depending on how the CPS is architected; however, some kind of key store or
repository could be implemented adjacent to it and perhaps even incorporated
into its operation. Key discovery is made more complicated by the fact that
there can potentially be multiple entities that have
authority over a telephone number: a carrier, a reseller, an enterprise,
and an end user might all have credentials permitting them to attest that they
are allowed to originate calls from a number, say. PASSporTs for out-of-band use
therefore might need to be encrypted with multiple keys in the hopes that one
will be decipherable by the relying party.<a href="#section-6.1-2" class="pilcrow">¶</a></p>
<p id="section-6.1-3">Again, the most obvious way to authorize storage is to require
the originator to authenticate themselves to the CPS with their STIR credential.
However, since the call is indexed at the CPS under the called number,
this can weaken the privacy story of the architecture, as it reveals to
the CPS both the identity of the caller and the callee. Moreover, it does not work
for the gateway use cases described above; to support those use cases, we must
effectively allow any entity to store PASSporTs at a CPS. This does not degrade
the anti-impersonation security of STIR, because entities who do not possess
the necessary credentials to sign the PASSporT will not be able to create
PASSporTs that will be treated as valid by verifiers. In this architecture,
it does not matter whether the CPS received a PASSporT from the authentication
service that created it or from an intermediary gateway downstream in the
routing path as in case 4 above. However, if literally anyone can store
PASSporTs in the CPS, an attacker could easily flood the CPS with millions
of bogus PASSporTs indexed under a calling number, and thereby prevent the called
party from finding a valid PASSporT for an incoming call buried in a haystack of fake entries.<a href="#section-6.1-3" class="pilcrow">¶</a></p>
<p id="section-6.1-4">The solution architecture must therefore include some sort of traffic
control system to prevent flooding. Preferably, this should not require
authenticating the source, as this will reveal to the CPS both the source and
destination of traffic. A potential solution is discussed below in <a href="#rate-control" class="xref">Section 7.5</a>.<a href="#section-6.1-4" class="pilcrow">¶</a></p>
</section>
</div>
<div id="retr">
<section id="section-6.2">
<h3 id="name-retrieval">
<a href="#section-6.2" class="section-number selfRef">6.2. </a><a href="#name-retrieval" class="section-name selfRef">Retrieval</a>
</h3>
<p id="section-6.2-1">For retrieval of PASSporTs, this architecture assumes that clients will
contact the CPS through some sort of polling or notification interface to receive all
current PASSporTs for calls destined to a particular telephone number, or block of numbers.<a href="#section-6.2-1" class="pilcrow">¶</a></p>
<p id="section-6.2-2">As PASSporTs stored at the CPS are encrypted with a key belonging
to the intended destination, the CPS can safely allow anyone to download PASSporTs
for a called number without much fear of compromising private information
about calls in progress -- provided that the CPS always returns at least one
encrypted blob in response to a request, even if there was no call in progress.
Otherwise, entities could poll the CPS constantly, or eavesdrop on traffic,
to learn whether or not calls were in progress. The CPS <span class="bcp14">MUST</span> generate
at least one unique and plausible encrypted response to all retrieval requests,
and these dummy encrypted PASSporTs <span class="bcp14">MUST NOT</span> be repeated for
later calls. An encryption scheme needs to be carefully chosen to make messages
look indistinguishable from random when encrypted, so that information about the
called party is not discoverable from legitimate encrypted PASSporTs.<a href="#section-6.2-2" class="pilcrow">¶</a></p>
<p id="section-6.2-3">Because the entity placing a call may discover multiple keys
associated with the called party number, multiple valid PASSporTs may be
stored in the CPS. A particular called party who retrieves PASSporTs from
the CPS may have access to only one of those keys. Thus, the presence of
one or more PASSporTs that the called party cannot decrypt -- which would
be indistinguishable from the "dummy" PASSporTs created by the CPS when
no calls are in progress - does not entail that there is no call in progress.
A retriever likely will need to decrypt all PASSporTs retrieved from the CPS,
and may find only one that is valid.<a href="#section-6.2-3" class="pilcrow">¶</a></p>
<p id="section-6.2-4">In order to prevent the CPS from learning the numbers that a callee
controls, callees might also request PASSporTs for numbers that they do not own,
that they have no hope of decrypting. Implementations could even allow a callee
to request PASSporTs for a range or prefix of numbers: a trade-off where that
callee is willing to sift through bulk quantities of undecryptable PASSporTs
for the sake of hiding from the CPS which numbers it controls.<a href="#section-6.2-4" class="pilcrow">¶</a></p>
<p id="section-6.2-5">Note that in out-of-band call forwarding cases, special behavior is
required to manage the relationship between PASSporTs using the diversion
extension <span>[<a href="#I-D.ietf-stir-passport-divert" class="xref">PASSPORT-DIVERT</a>]</span>.
The originating authentication service encrypts the initial PASSporT with the
public encryption key of the intended destination, but once a call is forwarded,
it may go to a destination that does not possess the corresponding private key
and thus could not decrypt the original PASSporT. This requires the retargeting
entity to generate encrypted PASSporTs that show a secure chain of diversion:
a retargeting storer <span class="bcp14">SHOULD</span> use the "div-o" PASSporT type,
with its "opt" extension, as specified in
<span>[<a href="#I-D.ietf-stir-passport-divert" class="xref">PASSPORT-DIVERT</a>]</span>, in order to nest
the original PASSporT within the encrypted diversion PASSporT.<a href="#section-6.2-5" class="pilcrow">¶</a></p>
</section>
</div>
</section>
</div>
<div id="arch">
<section id="section-7">
<h2 id="name-solution-architecture">
<a href="#section-7" class="section-number selfRef">7. </a><a href="#name-solution-architecture" class="section-name selfRef">Solution Architecture</a>
</h2>
<p id="section-7-1">In this section, we discuss a high-level architecture for providing the service
described in the previous sections. This discussion is deliberately
sketchy, focusing on broad concepts and skipping over details. The
intent here is merely to provide an overall architecture, not an implementable
specification. A more concrete example of how this might be specified is given in <a href="#web" class="xref">Section 9</a>.<a href="#section-7-1" class="pilcrow">¶</a></p>
<div id="phone">
<section id="section-7.1">
<h3 id="name-credentials-and-phone-numbe">
<a href="#section-7.1" class="section-number selfRef">7.1. </a><a href="#name-credentials-and-phone-numbe" class="section-name selfRef">Credentials and Phone Numbers</a>
</h3>
<p id="section-7.1-1">We start from the premise of the
<span><a href="#RFC7340" class="xref">STIR problem statement</a> [<a href="#RFC7340" class="xref">RFC7340</a>]</span> that phone numbers can be
associated with credentials that can be used to attest
ownership of numbers. For purposes of exposition, we will assume
that ownership is associated with the endpoint (e.g., a smartphone),
but it might well be associated with a provider or gateway acting for the
endpoint instead. It might be the case that multiple entities are
able to act for a given number, provided that they have the
appropriate authority. <span>[<a href="#RFC8226" class="xref">RFC8226</a>]</span> describes
a credential system suitable for this purpose; the question of how an entity is determined
to have control of a given number is out of scope for this document.<a href="#section-7.1-1" class="pilcrow">¶</a></p>
</section>
</div>
<div id="solve">
<section id="section-7.2">
<h3 id="name-call-flow">
<a href="#section-7.2" class="section-number selfRef">7.2. </a><a href="#name-call-flow" class="section-name selfRef">Call Flow</a>
</h3>
<p id="section-7.2-1">An overview of the basic calling and verification process is shown
below. In this diagram, we assume that Alice has the number
+1.111.555.1111 and Bob has the number +2.222.555.2222.<a href="#section-7.2-1" class="pilcrow">¶</a></p>
<div class="artwork art-text alignLeft" id="section-7.2-2">
<pre>
Alice Call Placement Service Bob
--------------------------------------------------------------------
Store Encrypted PASSporT for 2.222.555.2222 ->
Call from 1.111.555.1111 ------------------------------------------>
<-------------- Request PASSporT(s)
for 2.222.555.2222
Obtain Encrypted PASSporT -------->
(2.222.555.2222, 1.111.555.1111)
[Ring phone with verified callerid
= 1.111.555.1111]
</pre><a href="#section-7.2-2" class="pilcrow">¶</a>
</div>
<p id="section-7.2-3">When Alice wishes to make a call to Bob, she contacts the CPS and
stores an encrypted PASSporT on
the CPS indexed under Bob's number. The CPS then awaits retrievals for
that number.<a href="#section-7.2-3" class="pilcrow">¶</a></p>
<p id="section-7.2-4">When Alice places the call, Bob's phone would usually ring and display
Alice's number (+1.111.555.1111), which is informed by the existing
PSTN mechanisms for relaying a calling party number (e.g., the
Calling Party's Number (CIN) field of
the Initial Address Message (IAM)). Instead,
Bob's phone transparently contacts the CPS and requests any current
PASSporTs for calls to his number. The CPS responds with any such PASSporTs
(or dummy PASSporTs if no relevant ones are currently stored).
If such a PASSporT exists, and the verification service in Bob's phone decrypts it using
his private key, validates it, then
Bob's phone can present the calling party number
information as valid. Otherwise, the call is unverifiable. Note
that this does not necessarily mean that the call is bogus; because
we expect incremental deployment, many legitimate calls will be
unverifiable.<a href="#section-7.2-4" class="pilcrow">¶</a></p>
</section>
</div>
<div id="sec">
<section id="section-7.3">
<h3 id="name-security-analysis">
<a href="#section-7.3" class="section-number selfRef">7.3. </a><a href="#name-security-analysis" class="section-name selfRef">Security Analysis</a>
</h3>
<p id="section-7.3-1">The primary attack we seek to prevent is an attacker convincing the
callee that a given call is from some other caller C. There are two
scenarios to be concerned with:<a href="#section-7.3-1" class="pilcrow">¶</a></p>
<ol start="1" type="1" class="normal type-1" id="section-7.3-2">
<li id="section-7.3-2.1">The attacker wishes to impersonate a target when no call from that
target is in progress.<a href="#section-7.3-2.1" class="pilcrow">¶</a>
</li>
<li id="section-7.3-2.2">The attacker wishes to substitute himself for an existing call setup.<a href="#section-7.3-2.2" class="pilcrow">¶</a>
</li>
</ol>
<p id="section-7.3-3">If an attacker can inject fake PASSporTs into the CPS or in the
communication from the CPS to the callee, he can mount either attack.
As PASSporTs should be
digitally signed by an appropriate authority for the number and verified by the callee
(see <a href="#phone" class="xref">Section 7.1</a>), this should not arise in ordinary operations.
Any attacker who is aware of calls in progress can attempt to mount a race to substitute themselves
as described in <a href="#sub" class="xref">Section 7.4</a>. For privacy and robustness reasons,
using <span><a href="#RFC8446" class="xref">TLS</a> [<a href="#RFC8446" class="xref">RFC8446</a>]</span> on the originating
side when storing the PASSporT at the CPS is <span class="bcp14">RECOMMENDED</span>.<a href="#section-7.3-3" class="pilcrow">¶</a></p>
<p id="section-7.3-4">The entire system depends on the security of the credential
infrastructure. If the authentication credentials for a given number
are compromised, then an attacker can impersonate calls from that
number. However, that is no different from in-band STIR <span>[<a href="#RFC8224" class="xref">RFC8224</a>]</span>.<a href="#section-7.3-4" class="pilcrow">¶</a></p>
<p id="section-7.3-5">A secondary attack we must also prevent is denial-of-service against the CPS, which requires some form of rate control solution that will not degrade the privacy properties of the architecture.<a href="#section-7.3-5" class="pilcrow">¶</a></p>
</section>
</div>
<div id="sub">
<section id="section-7.4">
<h3 id="name-substitution-attacks">
<a href="#section-7.4" class="section-number selfRef">7.4. </a><a href="#name-substitution-attacks" class="section-name selfRef">Substitution Attacks</a>
</h3>
<p id="section-7.4-1">All that the receipt of the PASSporT from the CPS proves to the called party
is that Alice is trying to call
Bob (or at least was as of very recently) -- it does not prove that
any particular incoming call is from Alice. Consider the scenario
in which we have a service that provides an automatic callback to a
user-provided number. In that case, the attacker can try to arrange for a
false caller-id value, as shown below:<a href="#section-7.4-1" class="pilcrow">¶</a></p>
<div class="artwork art-text alignLeft" id="section-7.4-2">
<pre>
Attacker Callback Service CPS Bob
--------------------------------------------------------------------
Place call to Bob ---------->
(from 111.555.1111)
Store PASSporT for
CS:Bob ------------->
Call from Attacker (forged CS caller-id info) -------------------->
Call from CS ------------------------> X
<-- Retrieve PASSporT
for CS:Bob
PASSporT for CS:Bob ------------------------>
[Ring phone with callerid =
111.555.1111]
</pre><a href="#section-7.4-2" class="pilcrow">¶</a>
</div>
<p id="section-7.4-3">In order to mount this attack, the attacker contacts the Callback
Service (CS) and provides it with Bob's number. This causes the CS
to initiate a call to Bob. As before, the CS contacts the CPS to
insert an appropriate PASSporT and then initiates a call to Bob. Because
it is a valid CS injecting the PASSporT, none of the security checks
mentioned above help. However, the attacker simultaneously initiates
a call to Bob using forged caller-id information corresponding to the
CS. If he wins the race with the CS, then Bob's phone will attempt
to verify the attacker's call (and succeed since they are
indistinguishable), and the CS's call will go to busy/voice mail/call
waiting.<a href="#section-7.4-3" class="pilcrow">¶</a></p>
<p id="section-7.4-4">
In order to prevent a passive attacker from using traffic analysis or
similar means to learn precisely when a call is placed, it is essential
that the connection between the caller and the CPS be encrypted as recommended above.
Authentication services could store dummy PASSporTs at the CPS at random intervals in order
to make it more difficult for an eavesdropper to use traffic analysis to determine
that a call was about to be placed.<a href="#section-7.4-4" class="pilcrow">¶</a></p>
<p id="section-7.4-5">
Note that in a SIP environment, the callee might notice that
there were multiple INVITEs and thus detect this attack, but in some PSTN
interworking scenarios, or highly intermediated networks, only one call setup
attempt will reach the target. Also note that the success of this substitution
attack depends on the attacker landing their call within the narrow window
that the PASSporT is retained in the CPS, so
shortening that window will reduce the
opportunity for the attack. Finally, smart endpoints could implement some sort of
state coordination to ensure that both sides believe the call is in progress, though
methods of supporting that are outside the scope of this document.<a href="#section-7.4-5" class="pilcrow">¶</a></p>
</section>
</div>
<div id="rate-control">
<section id="section-7.5">
<h3 id="name-rate-control-for-cps-storag">
<a href="#section-7.5" class="section-number selfRef">7.5. </a><a href="#name-rate-control-for-cps-storag" class="section-name selfRef">Rate Control for CPS Storage</a>
</h3>
<p id="section-7.5-1">In order to prevent the flooding of a CPS with bogus PASSporTs,
we propose the use of "blind signatures" (see <span>[<a href="#RFC5636" class="xref">RFC5636</a>]</span>).
A sender will initially authenticate to the CPS using its STIR credentials
and acquire a signed token from the CPS that will be presented later
when storing a PASSporT. The flow looks as follows:<a href="#section-7.5-1" class="pilcrow">¶</a></p>
<div class="artwork art-text alignLeft" id="section-7.5-2">
<pre>
Sender CPS
Authenticate to CPS --------------------->
Blinded(K_temp) ------------------------->
<------------- Sign(K_cps, Blinded(K_temp))
[Disconnect]
Sign(K_cps, K_temp)
Sign(K_temp, E(K_receiver, PASSporT)) --->
</pre><a href="#section-7.5-2" class="pilcrow">¶</a>
</div>
<p id="section-7.5-3">At an initial time when no call is yet in progress, a potential client connects to the CPS, authenticates,
and sends a blinded version of a freshly generated public key. The
CPS returns a signed version of that blinded key. The sender can
then unblind the key and get a signature on K_temp from the CPS.<a href="#section-7.5-3" class="pilcrow">¶</a></p>
<p id="section-7.5-4">
Then later, when a client wants to store a PASSporT, it connects
to the CPS anonymously (preferably over a network connection that cannot be correlated with the token acquisition) and
sends both the signed K_temp and its own signature over the
encrypted PASSporT. The CPS verifies both signatures and, if they
verify, stores the encrypted passport (discarding the signatures).<a href="#section-7.5-4" class="pilcrow">¶</a></p>
<p id="section-7.5-5">
This design lets the CPS rate limit how many PASSporTs a given
sender can store just by counting how many times K_temp appears;
perhaps CPS policy might reject storage attempts and require acquisition
of a new K_temp after storing more than a certain number of PASSporTs
indexed under the same destination number in a short interval.
This does not, of course, allow the CPS to tell when bogus data
is being provisioned by an attacker,
simply the rate at which data is being provisioned. Potentially,
feedback mechanisms could be developed that would allow the called
parties to tell the CPS when they are receiving unusual or bogus
PASSporTs.<a href="#section-7.5-5" class="pilcrow">¶</a></p>
<p id="section-7.5-6">
This architecture also assumes that the CPS will age out PASSporTs.
A CPS <span class="bcp14">SHOULD NOT</span> keep any stored PASSporT for longer
than the recommended freshness
policy for the "iat" value as described in
<span>[<a href="#RFC8224" class="xref">RFC8224</a>]</span> (i.e., sixty seconds)
unless some local policy for a CPS deployment requires a longer or shorter interval.
Any reduction in this window makes substitution attacks
(see <a href="#sub" class="xref">Section 7.4</a>) harder to mount,
but making the window too small might conceivably age PASSporTs out
while a heavily redirected call is still alerting.<a href="#section-7.5-6" class="pilcrow">¶</a></p>
<p id="section-7.5-7">
An alternative potential approach to blind signatures would be
the use of verifiable oblivious pseudorandom functions (VOPRFs, per
<span>[<a href="#I-D.privacy-pass" class="xref">PRIVACY-PASS</a>]</span>), which may prove faster.<a href="#section-7.5-7" class="pilcrow">¶</a></p>
</section>
</div>
</section>
</div>
<div id="u8224">
<section id="section-8">
<h2 id="name-authentication-and-verifica">
<a href="#section-8" class="section-number selfRef">8. </a><a href="#name-authentication-and-verifica" class="section-name selfRef">Authentication and Verification Service Behavior for Out-of-Band</a>
</h2>
<p id="section-8-1">
<span>[<a href="#RFC8224" class="xref">RFC8224</a>]</span> defines an authentication service and a verification service as functions that act in the context of SIP requests and responses. This specification thus provides a more generic description of authentication service and verification service behavior that might or might not involve any SIP transactions, but depends only on placing a request for communications from
an originating identity to one or more destination identities.<a href="#section-8-1" class="pilcrow">¶</a></p>
<div id="as">
<section id="section-8.1">
<h3 id="name-authentication-service-as">
<a href="#section-8.1" class="section-number selfRef">8.1. </a><a href="#name-authentication-service-as" class="section-name selfRef">Authentication Service (AS)</a>
</h3>
<p id="section-8.1-1">
Out-of-band authentication services perform steps similar to those defined in <span>[<a href="#RFC8224" class="xref">RFC8224</a>]</span> with some exceptions:<a href="#section-8.1-1" class="pilcrow">¶</a></p>
<p id="section-8.1-2">
Step 1: The authentication service <span class="bcp14">MUST</span> determine whether it is
authoritative for the identity of the originator of the request, that is, the identity it will populate in the "orig" claim of the PASSporT.
It can do so only if it possesses the private key of one or more credentials that can be used
to sign for that identity, be it a domain or a telephone number or some other identifier. For example, the authentication service could hold the private key associated with a <span><a href="#RFC8225" class="xref">STIR certificate</a> [<a href="#RFC8225" class="xref">RFC8225</a>]</span>.<a href="#section-8.1-2" class="pilcrow">¶</a></p>
<p id="section-8.1-3">
Step 2: The authentication service <span class="bcp14">MUST</span> determine that the
originator of communications can claim the originating identity. This is a policy
decision made by the authentication service that depends on its relationship to
the originator. For an out-of-band application built into the
calling device, for example, this is the same check performed in Step 1: does the
calling device hold a private key, one corresponding to a STIR certificate,
that can sign for the originating identity?<a href="#section-8.1-3" class="pilcrow">¶</a></p>
<div id="as-step3">
<p id="section-8.1-4">
Step 3: The authentication service <span class="bcp14">MUST</span> acquire the public encryption key
of the destination, which will be used to encrypt the PASSporT (see <a href="#lookup" class="xref">Section 11</a>).
It <span class="bcp14">MUST</span> also discover (see <a href="#cps" class="xref">Section 10</a>)
the CPS associated with the destination. The authentication service
may already have the encryption key and destination CPS cached, or may need
to query a service to acquire the key. Note that per <a href="#rate-control" class="xref">Section 7.5</a>,
the authentication service may also need to acquire a token for PASSporT
storage from the CPS upon CPS discovery. It is anticipated that the discovery mechanism
(see <a href="#cps" class="xref">Section 10</a>) used to find the appropriate
CPS will also find the proper key server for the public key of the destination.
In some cases, a destination may have multiple public encryption keys associated with it.
In that case, the authentication service <span class="bcp14">MUST</span> collect all of those keys.<a href="#section-8.1-4" class="pilcrow">¶</a></p>
</div>
<p id="section-8.1-5">
Step 4: The authentication service <span class="bcp14">MUST</span> create the PASSporT object. This includes acquiring the system time to populate the "iat" claim, and populating the "orig" and "dest" claims as
described in <span>[<a href="#RFC8225" class="xref">RFC8225</a>]</span>. The authentication service <span class="bcp14">MUST</span> then encrypt the PASSporT. If in Step 3 the authentication service discovered multiple public keys for the destination, it
<span class="bcp14">MUST</span> create one encrypted copy for each public key it discovered.<a href="#section-8.1-5" class="pilcrow">¶</a></p>
<p id="section-8.1-6">
Finally, the authentication service stores the encrypted PASSporT(s) at the CPS
discovered in Step 3. Only after that is completed should any call be initiated.
Note that a call might be initiated over SIP, and the authentication
service would place the same PASSporT in the Identity header field value of the SIP request --
though SIP would carry a cleartext version rather than an encrypted version
sent to the CPS. In that case, out-of-band would serve as a fallback mechanism
if the request was not conveyed over SIP end-to-end. Also, note that the
authentication service <span class="bcp14">MAY</span> use a compact form of the PASSporT
for a SIP request, whereas the version stored at the CPS <span class="bcp14">MUST</span>
always be a full-form PASSporT.<a href="#section-8.1-6" class="pilcrow">¶</a></p>
</section>
</div>
<div id="vs">
<section id="section-8.2">
<h3 id="name-verification-service-vs">
<a href="#section-8.2" class="section-number selfRef">8.2. </a><a href="#name-verification-service-vs" class="section-name selfRef">Verification Service (VS)</a>
</h3>
<p id="section-8.2-1">
When a call arrives, an out-of-band verification service performs steps similar to those defined in <span>[<a href="#RFC8224" class="xref">RFC8224</a>]</span> with some exceptions:<a href="#section-8.2-1" class="pilcrow">¶</a></p>
<div id="vs-step1">
<p id="section-8.2-2">
Step 1: The verification service contacts the CPS and requests all current PASSporTs for its destination number; or alternatively it may receive PASSporTs through a push interface from the CPS in some deployments. The verification service <span class="bcp14">MUST</span> then decrypt all PASSporTs using its private key. Some PASSporTs may not be decryptable for any number of reasons: they may be intended for a different verification service, or they may be "dummy" values inserted by the CPS for privacy purposes. The next few steps will narrow down the set of PASSporTs that the verification service will examine from that initial decryptable set.<a href="#section-8.2-2" class="pilcrow">¶</a></p>
</div>
<p id="section-8.2-3">
Step 2: The verification service <span class="bcp14">MUST</span> determine if any "ppt" extensions in the PASSporTs are unsupported. It takes only the set of supported PASSporTs and applies the next step to them.<a href="#section-8.2-3" class="pilcrow">¶</a></p>
<p id="section-8.2-4">
Step 3: The verification service <span class="bcp14">MUST</span> determine if there is an overlap between the calling party number presented in call signaling and the "orig" field of any decrypted PASSporTs. It takes the set of matching PASSporTs and applies the next step to them.<a href="#section-8.2-4" class="pilcrow">¶</a></p>
<p id="section-8.2-5">
Step 4: The verification service <span class="bcp14">MUST</span> determine if the credentials that signed each PASSporT are valid, and if the verification service trusts the CA that issued the credentials. It takes the set
of trusted PASSporTs to the next step.<a href="#section-8.2-5" class="pilcrow">¶</a></p>
<p id="section-8.2-6">
Step 5: The verification service <span class="bcp14">MUST</span> check the freshness of the "iat" claim of each PASSporT. The exact interval of time that determines freshness is left to local policy. It takes the set of fresh PASSporTs to the next step.<a href="#section-8.2-6" class="pilcrow">¶</a></p>
<p id="section-8.2-7">
Step 6: The verification service <span class="bcp14">MUST</span> check the validity of the signature over each PASSporT, as described in <span>[<a href="#RFC8225" class="xref">RFC8225</a>]</span>.<a href="#section-8.2-7" class="pilcrow">¶</a></p>
<p id="section-8.2-8">
Finally, the verification service will end up with one or more valid PASSporTs corresponding to the call it has received. In keeping with baseline STIR, this document does not dictate any particular treatment of calls that have valid PASSporTs associated with them; the handling of the call
after the verification process depends on how the verification
service is implemented and on local policy. However, it is anticipated that local policies could involve
making different forwarding decisions in intermediary
implementations, or changing how the user is alerted or how identity
is rendered in user agent implementations.<a href="#section-8.2-8" class="pilcrow">¶</a></p>
</section>
</div>
<div id="hybrid">
<section id="section-8.3">
<h3 id="name-gateway-placement-services">
<a href="#section-8.3" class="section-number selfRef">8.3. </a><a href="#name-gateway-placement-services" class="section-name selfRef">Gateway Placement Services</a>
</h3>
<p id="section-8.3-1">
The STIR out-of-band mechanism also supports the presence of gateway placement services, which do not create PASSporTs themselves, but instead take PASSporTs out of signaling protocols and store them at a CPS before gatewaying to a protocol that cannot carry PASSporTs itself. For example, a SIP gateway that sends calls to the PSTN could receive a call with an Identity header field, extract a PASSporT from the Identity header field, and store that PASSporT at a CPS.<a href="#section-8.3-1" class="pilcrow">¶</a></p>
<p id="section-8.3-2">
To place a PASSporT at a CPS, a gateway <span class="bcp14">MUST</span> perform
<a href="#as-step3" class="xref">Step 3</a> of <a href="#as" class="xref">Section 8.1</a> above:
that is, it must discover the CPS and public key associated with the
destination of the call, and may need to acquire a PASSporT storage token
(see <a href="#stor" class="xref">Section 6.1</a>). Per <a href="#as-step3" class="xref">Step 3</a>
of <a href="#as" class="xref">Section 8.1</a>, this may entail discovering several keys.
The gateway then collects the in-band PASSporT(s) from the in-band signaling,
encrypts the PASSporT(s), and stores them at the CPS.<a href="#section-8.3-2" class="pilcrow">¶</a></p>
<p id="section-8.3-3">
A similar service could be performed by a gateway that retrieves PASSporTs from a CPS and inserts them into signaling protocols that support carrying PASSporTs in-band. This behavior may be defined by future specifications.<a href="#section-8.3-3" class="pilcrow">¶</a></p>
</section>
</div>
</section>
</div>
<div id="web">
<section id="section-9">
<h2 id="name-example-https-interface-to-">
<a href="#section-9" class="section-number selfRef">9. </a><a href="#name-example-https-interface-to-" class="section-name selfRef">Example HTTPS Interface to the CPS</a>
</h2>
<p id="section-9-1">
As a rough example, we show a CPS implementation here that uses a
Representational State Transfer (REST) API <span>[<a href="#REST" class="xref">REST</a>]</span> to store and retrieve objects at the CPS.
The calling party stores the PASSporT at the CPS prior to initiating the call; the
PASSporT is stored at a location at the CPS that corresponds to the called number.
Note that it is possible for multiple parties to be calling a number at the same time, and that for called
numbers such as large call centers, many PASSporTs could legitimately be stored
simultaneously, and it might prove difficult to correlate these with incoming calls.<a href="#section-9-1" class="pilcrow">¶</a></p>
<p id="section-9-2">
Assume that an authentication service has created the following PASSporT for a call to the telephone number 2.222.555.2222 (note that these are dummy values):<a href="#section-9-2" class="pilcrow">¶</a></p>
<div class="artwork art-text alignLeft" id="section-9-3">
<pre>
eyJhbGciOiJFUzI1NiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9
jZXJ0LmV4YW1wbGUub3JnL3Bhc3Nwb3J0LmNlciJ9.eyJkZXN0Ijp7InRuIjpbI
jIyMjI1NTUyMjIyIl19LCJpYXQiOiIxNTgzMjUxODEwIiwib3JpZyI6eyJ0biI6
IjExMTE1NTUxMTExIn19.pnij4IlLHoR4vxID0u3CT1e9Hq4xLngZUTv45Vbxmd
3IVyZug4KOSa378yfP4x6twY0KTdiDypsereS438ZHaQ
</pre><a href="#section-9-3" class="pilcrow">¶</a>
</div>
<p id="section-9-4">
Through some discovery mechanism (see <a href="#cps" class="xref">Section 10</a>), the authentication service discovers the network location of a web service that acts as the CPS for 2.222.555.2222. Through the same mechanism, we will say that it has also discovered one public encryption key for that destination. It uses that encryption key to encrypt the PASSporT, resulting in the encrypted PASSporT:<a href="#section-9-4" class="pilcrow">¶</a></p>
<div class="artwork art-text alignLeft" id="section-9-5">
<pre>
rlWuoTpvBvWSHmV1AvVfVaE5pPV6VaOup3Ajo3W0VvjvrQI1VwbvnUE0pUZ6Yl9w
MKW0YzI4LJ1joTHho3WaY3Oup3Ajo3W0YzAypvW9rlWxMKA0Vwc7VaIlnFV6JlWm
nKN6LJkcL2INMKuuoKOfMF5wo20vKK0fVzyuqPV6VwR0AQZlZQtmAQHvYPWipzyaV
wc7VaEhVwbvZGVkAGH1AGRlZGVvsK0ed3cwG1ubEjnxRTwUPaJFjHafuq0-mW6S1
IBtSJFwUOe8Dwcwyx-pcSLcSLfbwAPcGmB3DsCBypxTnF6uRpx7j
</pre><a href="#section-9-5" class="pilcrow">¶</a>
</div>
<p id="section-9-6">
Having concluded the numbered steps in <a href="#as" class="xref">Section 8.1</a>, including acquiring any token (per <a href="#stor" class="xref">Section 6.1</a>) needed to store the PASSporT at the CPS, the authentication service then stores the encrypted PASSporT:<a href="#section-9-6" class="pilcrow">¶</a></p>
<div class="artwork art-text alignLeft" id="section-9-7">
<pre>
POST /cps/2.222.555.2222/ppts HTTP/1.1
Host: cps.example.com
Content-Type: application/passport
rlWuoTpvBvWSHmV1AvVfVaE5pPV6VaOup3Ajo3W0VvjvrQI1VwbvnUE0pUZ6Yl9w
MKW0YzI4LJ1joTHho3WaY3Oup3Ajo3W0YzAypvW9rlWxMKA0Vwc7VaIlnFV6JlWm
nKN6LJkcL2INMKuuoKOfMF5wo20vKK0fVzyuqPV6VwR0AQZlZQtmAQHvYPWipzyaV
wc7VaEhVwbvZGVkAGH1AGRlZGVvsK0ed3cwG1ubEjnxRTwUPaJFjHafuq0-mW6S1
IBtSJFwUOe8Dwcwyx-pcSLcSLfbwAPcGmB3DsCBypxTnF6uRpx7j
</pre><a href="#section-9-7" class="pilcrow">¶</a>
</div>
<p id="section-9-8">
The web service assigns a new location for this encrypted PASSporT in the collection, returning a 201 OK with the location of /cps/2.222.222.2222/ppts/ppt1.
Now the authentication service can place the call, which may be signaled by various protocols. Once the call arrives at the terminating side, a verification service
contacts its CPS to ask for the set of incoming calls for its telephone number (2.222.222.2222).<a href="#section-9-8" class="pilcrow">¶</a></p>
<div class="artwork art-text alignLeft" id="section-9-9">
<pre>
GET /cps/2.222.555.2222/ppts
Host: cps.example.com
</pre><a href="#section-9-9" class="pilcrow">¶</a>
</div>
<p id="section-9-10">
This returns to the verification service a list of the PASSporTs currently in the collection, which currently consists of only /cps/2.222.222.2222/ppts/ppt1. The verification
service then sends a new GET for /cps/2.222.555.2222/ppts/ppt1/ which yields:<a href="#section-9-10" class="pilcrow">¶</a></p>
<div class="artwork art-text alignLeft" id="section-9-11">
<pre>
HTTP/1.1 200 OK
Content-Type: application/passport
Link: <https://cps.example.com/cps/2.222.555.2222/ppts>
rlWuoTpvBvWSHmV1AvVfVaE5pPV6VaOup3Ajo3W0VvjvrQI1VwbvnUE0pUZ6Yl9w
MKW0YzI4LJ1joTHho3WaY3Oup3Ajo3W0YzAypvW9rlWxMKA0Vwc7VaIlnFV6JlWm
nKN6LJkcL2INMKuuoKOfMF5wo20vKK0fVzyuqPV6VwR0AQZlZQtmAQHvYPWipzyaV
wc7VaEhVwbvZGVkAGH1AGRlZGVvsK0ed3cwG1ubEjnxRTwUPaJFjHafuq0-mW6S1
IBtSJFwUOe8Dwcwyx-pcSLcSLfbwAPcGmB3DsCBypxTnF6uRpx7j
</pre><a href="#section-9-11" class="pilcrow">¶</a>
</div>
<p id="section-9-12">
That concludes <a href="#vs-step1" class="xref">Step 1</a> of <a href="#vs" class="xref">Section 8.2</a>; the verification service then goes on to the next step, processing that PASSporT through its various checks. A complete protocol description for CPS interactions is left to future work.<a href="#section-9-12" class="pilcrow">¶</a></p>
</section>
</div>
<div id="cps">
<section id="section-10">
<h2 id="name-cps-discovery">
<a href="#section-10" class="section-number selfRef">10. </a><a href="#name-cps-discovery" class="section-name selfRef">CPS Discovery</a>
</h2>
<p id="section-10-1">
In order for the two ends of the out-of-band dataflow to coordinate, they must agree on a way to discover a CPS and retrieve PASSporT objects from it
based solely on the rendezvous information available: the calling party number and the called number. Because the storage of PASSporTs in this architecture is indexed
by the called party number, it makes sense to discover a CPS based on the called party number as well.
There are a number of potential service discovery mechanisms that could be used for
this purpose. The means of service discovery may vary by use case.<a href="#section-10-1" class="pilcrow">¶</a></p>
<p id="section-10-2">
Although the discussion above is written largely in terms of a single CPS, having a significant fraction of all telephone calls result in storing and retrieving PASSporTs at a single monolithic CPS
has obvious scaling problems, and would as well allow the CPS to
gather metadata about a very wide set of callers and callees. These issues can be alleviated by operational models with a
federated CPS; any service discovery mechanism for out-of-band STIR
should enable federation of the CPS function. Likely models include ones
where a carrier operates one or more CPS instances on behalf of its customers,
an enterprise runs a CPS instance on behalf of its PBX users, or a third-party service provider
offers a CPS as a cloud service.<a href="#section-10-2" class="pilcrow">¶</a></p>
<p id="section-10-3">
Some service discovery possibilities under consideration include the following:<a href="#section-10-3" class="pilcrow">¶</a></p>
<ul class="ulEmpty normal">
<li class="ulEmpty normal" id="section-10-4.1">
For some deployments in closed (e.g., intra-network) environments, the CPS location can simply
be provisioned in implementations, obviating the need for a discovery protocol.<a href="#section-10-4.1" class="pilcrow">¶</a>
</li>
<li class="ulEmpty normal" id="section-10-4.2">
If a credential lookup service is already available (see <a href="#lookup" class="xref">Section 11</a>),
the CPS location can also be recorded in the callee's credentials;
an extension to <span>[<a href="#RFC8226" class="xref">RFC8226</a>]</span> could, for example,
provide a link to the location of the CPS
where PASSporTs should be stored for a destination.<a href="#section-10-4.2" class="pilcrow">¶</a>
</li>
<li class="ulEmpty normal" id="section-10-4.3">
There exist a number of common directory systems that might be used to translate
telephone numbers into the URIs of a CPS.
<span><a href="#RFC6116" class="xref">ENUM</a> [<a href="#RFC6116" class="xref">RFC6116</a>]</span> is commonly implemented,
though no "golden root" central ENUM administration exists that could be easily
reused today to help the endpoints discover a common CPS. Other protocols associated
with queries for telephone numbers, such as the
<span><a href="#I-D.ietf-modern-teri" class="xref">Telephone-Related Information (TeRI) protocol</a> [<a href="#I-D.ietf-modern-teri" class="xref">MODERN-TERI</a>]</span>,
could also serve for this application.<a href="#section-10-4.3" class="pilcrow">¶</a>
</li>
<li class="ulEmpty normal" id="section-10-4.4">
Another possibility is to use a single distributed service for this function.
<span><a href="#I-D.jennings-vipr-overview" class="xref">Verification Involving PSTN Reachability (VIPR)</a> [<a href="#I-D.jennings-vipr-overview" class="xref">VIPR-OVERVIEW</a>]</span> proposed a
<span><a href="#RFC6940" class="xref">REsource LOcation And Discovery (RELOAD)</a> [<a href="#RFC6940" class="xref">RFC6940</a>]</span> usage for telephone numbers to help direct calls to enterprises on the Internet. It would be possible to describe a similar RELOAD usage
to identify the CPS where calls for a particular telephone number should be stored.
One advantage that the STIR architecture has over VIPR is that it assumes a credential system
that proves authority over telephone numbers; those credentials could be used to determine
whether or not a CPS could legitimately claim to be the proper store for a given telephone
number.<a href="#section-10-4.4" class="pilcrow">¶</a>
</li>
</ul>
<p id="section-10-5">
This document does not prescribe any single way to do service discovery for a CPS;
it is envisioned that initial deployments will provision the location of the CPS
at the authentication service and verification service.<a href="#section-10-5" class="pilcrow">¶</a></p>
</section>
</div>
<div id="lookup">
<section id="section-11">
<h2 id="name-encryption-key-lookup">
<a href="#section-11" class="section-number selfRef">11. </a><a href="#name-encryption-key-lookup" class="section-name selfRef">Encryption Key Lookup</a>
</h2>
<p id="section-11-1">
In order to encrypt a PASSporT (see <a href="#stor" class="xref">Section 6.1</a>), the caller needs access to the callee's
public encryption key. Note that because STIR uses the Elliptic Curve Digital Signature Algorithm (ECDSA)
for signing PASSporTs, the public key used to
verify PASSporTs is not suitable for this function, and thus the encryption key
must be discovered separately. This requires some sort
of directory/lookup system.<a href="#section-11-1" class="pilcrow">¶</a></p>
<p id="section-11-2">
Some initial STIR deployments have fielded certificate repositories so that verification services
can acquire the signing credentials for PASSporTs, which are linked through a URI in the "x5u" element of the PASSporT.
These certificate repositories could clearly be repurposed for allowing authentication services to download
the public encryption key for the called party -- provided they can be discovered by calling parties.
This document does not specify any
particular discovery scheme, but instead offers some general guidance about potential approaches.<a href="#section-11-2" class="pilcrow">¶</a></p>
<p id="section-11-3">
It is a desirable property that the public encryption key for a given party
be linked to their STIR credential. An <span><a href="#RFC7748" class="xref">Elliptic Curve Diffie-Hellman (ECDH)</a> [<a href="#RFC7748" class="xref">RFC7748</a>]</span>
public-private key pair might be generated for a
<span><a href="#I-D.ietf-tls-subcerts" class="xref">subcert</a> [<a href="#I-D.ietf-tls-subcerts" class="xref">TLS-SUBCERTS</a>]</span> of the STIR credential.
That subcert could be looked up along with the STIR credential of the called party.
Further details of this subcert, and the exact lookup mechanism involved, are deferred for future protocol work.<a href="#section-11-3" class="pilcrow">¶</a></p>
<p id="section-11-4">
Obviously, if there is a single central database that the caller and
callee each access in real time to download the other's
keys, then this represents a real privacy risk, as the central
key database learns about each call. A number of mechanisms are
potentially available to mitigate this:<a href="#section-11-4" class="pilcrow">¶</a></p>
<ul class="ulEmpty normal">
<li class="ulEmpty normal" id="section-11-5.1">
Have endpoints pre-fetch keys for potential counterparties
(e.g., their address book or the entire database).<a href="#section-11-5.1" class="pilcrow">¶</a>
</li>
<li class="ulEmpty normal" id="section-11-5.2">
Have caching servers in the user's network that proxy their
fetches and thus conceal the relationship between the user and the
keys they are fetching.<a href="#section-11-5.2" class="pilcrow">¶</a>
</li>
</ul>
<p id="section-11-6">
Clearly, there is a privacy/timeliness trade-off in that getting
up-to-date knowledge about credential validity requires
contacting the credential directory in real-time (e.g., via the
<span><a href="#RFC6960" class="xref">Online Certificate Status Protocol (OCSP)</a> [<a href="#RFC6960" class="xref">RFC6960</a>]</span>).
This is somewhat mitigated for the caller's credentials in that he
can get short-term credentials right before placing a call which only
reveals his calling rate, but not who he is calling. Alternately,
the CPS can verify the caller's credentials via OCSP, though of
course this requires the callee to trust the CPS's verification.
This approach does not work as well for the callee's credentials, but
the risk there is more modest since an attacker would need to both
have the callee's credentials and regularly poll the database for
every potential caller.<a href="#section-11-6" class="pilcrow">¶</a></p>
<p id="section-11-7">
We consider the exact best point in the trade-off space to be an open
issue.<a href="#section-11-7" class="pilcrow">¶</a></p>
</section>
</div>
<div id="IANA">
<section id="section-12">
<h2 id="name-iana-considerations">
<a href="#section-12" class="section-number selfRef">12. </a><a href="#name-iana-considerations" class="section-name selfRef">IANA Considerations</a>
</h2>
<p id="section-12-1">This document has no IANA actions.<a href="#section-12-1" class="pilcrow">¶</a></p>
</section>
</div>
<div id="priv">
<section id="section-13">
<h2 id="name-privacy-considerations">
<a href="#section-13" class="section-number selfRef">13. </a><a href="#name-privacy-considerations" class="section-name selfRef">Privacy Considerations</a>
</h2>
<p id="section-13-1">
Delivering PASSporTs out-of-band offers a different set of privacy properties
than traditional in-band STIR. In-band operations convey
PASSporTs as headers in SIP messages in cleartext, which any
forwarding intermediaries can potentially inspect. By contrast, out-of-band
STIR stores these PASSporTs at a service after encrypting them
as described in <a href="#authz" class="xref">Section 6</a>, effectively creating a path
between the authentication and verification service in which the CPS
is the sole intermediary, but the CPS cannot read the PASSporTs.
Potentially, out-of-band PASSporT delivery could thus improve on the privacy story of STIR.<a href="#section-13-1" class="pilcrow">¶</a></p>
<p id="section-13-2">
The principle actors in the operation of out-of-band are the
AS, VS, and CPS. The
AS and VS functions differ from baseline behavior <span>[<a href="#RFC8224" class="xref">RFC8224</a>]</span>,
in that they interact with a CPS over a non-SIP interface,
of which the REST interface in <a href="#web" class="xref">Section 9</a> serves as an example.
Some out-of-band deployments may also require a discovery service for the
CPS itself (<a href="#cps" class="xref">Section 10</a>) and/or encryption keys
(<a href="#lookup" class="xref">Section 11</a>). Even with encrypted PASSporTs,
the network interactions by which the AS and VS interact with the CPS, and
to a lesser extent any discovery services, thus create potential opportunities
for data leakage about calling and called parties.<a href="#section-13-2" class="pilcrow">¶</a></p>
<p id="section-13-3">
The process of storing and retrieving PASSporTs at a CPS can itself
reveal information about calls being placed. The mechanism takes
care not to require that the AS authenticate itself to the CPS,
relying instead on a blind signature mechanism for flood control prevention.
<a href="#sub" class="xref">Section 7.4</a>
discusses the practice of storing "dummy" PASSporTs at random intervals
to thwart traffic analysis, and as <a href="#vs" class="xref">Section 8.2</a> notes, a CPS is required to
return a dummy PASSporT even if there is no PASSporT indexed for
that calling number, which similarly enables the retrieval side to
randomly request PASSporTs when there are no calls in progress.
Note that the caller's IP address itself leaks information about the caller.
Proxying the storage of the CPS through some third party could help prevent
this attack. It might also be possible to use a more sophisticated system
such as Riposte <span>[<a href="#RIPOSTE" class="xref">RIPOSTE</a>]</span>.
These measures can help to mitigate information disclosure in the system.
In implementations that require service discovery
(see <a href="#cps" class="xref">Section 10</a>), perhaps through key discovery
(<a href="#lookup" class="xref">Section 11</a>), similar measures could be used
to make sure that service discovery does not itself disclose information about calls.<a href="#section-13-3" class="pilcrow">¶</a></p>
<p id="section-13-4">
Ultimately, this document only provides a framework for future implementation
of out-of-band systems, and the privacy properties of a given implementation will
depend on architectural assumptions made in those environments. More closed
systems for intranet operations may adopt a weaker security posture but
otherwise mitigate the risks of information disclosure, whereas more open environments
will require careful implementation of the practices described here.<a href="#section-13-4" class="pilcrow">¶</a></p>
<p id="section-13-5">
For general privacy risks associated with the operations of STIR,
also see the privacy considerations covered in <span><a href="https://www.rfc-editor.org/rfc/rfc8224#section-11" class="relref">Section 11</a> of [<a href="#RFC8224" class="xref">RFC8224</a>]</span>.<a href="#section-13-5" class="pilcrow">¶</a></p>
</section>
</div>
<div id="Security">
<section id="section-14">
<h2 id="name-security-considerations">
<a href="#section-14" class="section-number selfRef">14. </a><a href="#name-security-considerations" class="section-name selfRef">Security Considerations</a>
</h2>
<p id="section-14-1">This entire document is about security, but the detailed security
properties will vary depending on how the framework is applied and deployed. General guidance for dealing
with the most obvious security challenges posed by this framework is given in
Sections <a href="#sec" class="xref">7.3</a> and <a href="#sub" class="xref">7.4</a>,
along proposed solutions for problems like denial-of-service attacks or traffic analysis against the CPS.<a href="#section-14-1" class="pilcrow">¶</a></p>
<p id="section-14-2">Although there are considerable security challenges associated with
widespread deployment of a public CPS, those must be weighed against the
potential usefulness of a service that delivers a STIR assurance without
requiring the passage of end-to-end SIP. Ultimately, the security properties
of this mechanism are at least comparable to in-band
STIR: the substitution attack documented in <a href="#sub" class="xref">Section 7.4</a>
could be implemented by any in-band SIP intermediary or eavesdropper who
happened to see the PASSporT in transit, say, and launched its own call with a
copy of that PASSporT to race against the original to the destination.<a href="#section-14-2" class="pilcrow">¶</a></p>
</section>
</div>
<section id="section-15">
<h2 id="name-informative-references">
<a href="#section-15" class="section-number selfRef">15. </a><a href="#name-informative-references" class="section-name selfRef">Informative References</a>
</h2>
<dl class="references">
<dt id="I-D.ietf-modern-teri">[MODERN-TERI]</dt>
<dd>
<span class="refAuthor">Peterson, J.</span>, <span class="refTitle">"An Architecture and Information Model for Telephone-Related Information (TeRI)"</span>, <span class="refContent">Work in Progress</span>, <span class="seriesInfo">Internet-Draft, draft-ietf-modern-teri-00</span>, <time datetime="2018-07-02" class="refDate">2 July 2018</time>, <span><<a href="https://tools.ietf.org/html/draft-ietf-modern-teri-00">https://tools.ietf.org/html/draft-ietf-modern-teri-00</a>></span>. </dd>
<dd class="break"></dd>
<dt id="I-D.ietf-stir-passport-divert">[PASSPORT-DIVERT]</dt>
<dd>
<span class="refAuthor">Peterson, J.</span>, <span class="refTitle">"PASSporT Extension for Diverted Calls"</span>, <span class="refContent">Work in Progress</span>, <span class="seriesInfo">Internet-Draft, draft-ietf-stir-passport-divert-09</span>, <time datetime="2020-07-13" class="refDate">13 July 2020</time>, <span><<a href="https://tools.ietf.org/html/draft-ietf-stir-passport-divert-09">https://tools.ietf.org/html/draft-ietf-stir-passport-divert-09</a>></span>. </dd>
<dd class="break"></dd>
<dt id="I-D.privacy-pass">[PRIVACY-PASS]</dt>
<dd>
<span class="refAuthor">Davidson, A.</span><span class="refAuthor"> and N. Sullivan</span>, <span class="refTitle">"The Privacy Pass Protocol"</span>, <span class="refContent">Work in Progress</span>, <span class="seriesInfo">Internet-Draft, draft-privacy-pass-00</span>, <time datetime="2019-11-03" class="refDate">3 November 2019</time>, <span><<a href="https://tools.ietf.org/html/draft-privacy-pass-00">https://tools.ietf.org/html/draft-privacy-pass-00</a>></span>. </dd>
<dd class="break"></dd>
<dt id="REST">[REST]</dt>
<dd>
<span class="refAuthor">Fielding, R.</span>, <span class="refTitle">"Architectural Styles and the Design of Network-based Software Architectures, Chapter 5: Representational State Transfer"</span>, <span class="seriesInfo">Ph.D. Dissertation, University of California, Irvine</span>, <time datetime="2010" class="refDate">2010</time>. </dd>
<dd class="break"></dd>
<dt id="RFC2119">[RFC2119]</dt>
<dd>
<span class="refAuthor">Bradner, S.</span>, <span class="refTitle">"Key words for use in RFCs to Indicate Requirement Levels"</span>, <span class="seriesInfo">BCP 14</span>, <span class="seriesInfo">RFC 2119</span>, <span class="seriesInfo">DOI 10.17487/RFC2119</span>, <time datetime="1997-03" class="refDate">March 1997</time>, <span><<a href="https://www.rfc-editor.org/info/rfc2119">https://www.rfc-editor.org/info/rfc2119</a>></span>. </dd>
<dd class="break"></dd>
<dt id="RFC3261">[RFC3261]</dt>
<dd>
<span class="refAuthor">Rosenberg, J.</span><span class="refAuthor">, Schulzrinne, H.</span><span class="refAuthor">, Camarillo, G.</span><span class="refAuthor">, Johnston, A.</span><span class="refAuthor">, Peterson, J.</span><span class="refAuthor">, Sparks, R.</span><span class="refAuthor">, Handley, M.</span><span class="refAuthor">, and E. Schooler</span>, <span class="refTitle">"SIP: Session Initiation Protocol"</span>, <span class="seriesInfo">RFC 3261</span>, <span class="seriesInfo">DOI 10.17487/RFC3261</span>, <time datetime="2002-06" class="refDate">June 2002</time>, <span><<a href="https://www.rfc-editor.org/info/rfc3261">https://www.rfc-editor.org/info/rfc3261</a>></span>. </dd>
<dd class="break"></dd>
<dt id="RFC5636">[RFC5636]</dt>
<dd>
<span class="refAuthor">Park, S.</span><span class="refAuthor">, Park, H.</span><span class="refAuthor">, Won, Y.</span><span class="refAuthor">, Lee, J.</span><span class="refAuthor">, and S. Kent</span>, <span class="refTitle">"Traceable Anonymous Certificate"</span>, <span class="seriesInfo">RFC 5636</span>, <span class="seriesInfo">DOI 10.17487/RFC5636</span>, <time datetime="2009-08" class="refDate">August 2009</time>, <span><<a href="https://www.rfc-editor.org/info/rfc5636">https://www.rfc-editor.org/info/rfc5636</a>></span>. </dd>
<dd class="break"></dd>
<dt id="RFC6116">[RFC6116]</dt>
<dd>
<span class="refAuthor">Bradner, S.</span><span class="refAuthor">, Conroy, L.</span><span class="refAuthor">, and K. Fujiwara</span>, <span class="refTitle">"The E.164 to Uniform Resource Identifiers (URI) Dynamic Delegation Discovery System (DDDS) Application (ENUM)"</span>, <span class="seriesInfo">RFC 6116</span>, <span class="seriesInfo">DOI 10.17487/RFC6116</span>, <time datetime="2011-03" class="refDate">March 2011</time>, <span><<a href="https://www.rfc-editor.org/info/rfc6116">https://www.rfc-editor.org/info/rfc6116</a>></span>. </dd>
<dd class="break"></dd>
<dt id="RFC6940">[RFC6940]</dt>
<dd>
<span class="refAuthor">Jennings, C.</span><span class="refAuthor">, Lowekamp, B., Ed.</span><span class="refAuthor">, Rescorla, E.</span><span class="refAuthor">, Baset, S.</span><span class="refAuthor">, and H. Schulzrinne</span>, <span class="refTitle">"REsource LOcation And Discovery (RELOAD) Base Protocol"</span>, <span class="seriesInfo">RFC 6940</span>, <span class="seriesInfo">DOI 10.17487/RFC6940</span>, <time datetime="2014-01" class="refDate">January 2014</time>, <span><<a href="https://www.rfc-editor.org/info/rfc6940">https://www.rfc-editor.org/info/rfc6940</a>></span>. </dd>
<dd class="break"></dd>
<dt id="RFC6960">[RFC6960]</dt>
<dd>
<span class="refAuthor">Santesson, S.</span><span class="refAuthor">, Myers, M.</span><span class="refAuthor">, Ankney, R.</span><span class="refAuthor">, Malpani, A.</span><span class="refAuthor">, Galperin, S.</span><span class="refAuthor">, and C. Adams</span>, <span class="refTitle">"X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP"</span>, <span class="seriesInfo">RFC 6960</span>, <span class="seriesInfo">DOI 10.17487/RFC6960</span>, <time datetime="2013-06" class="refDate">June 2013</time>, <span><<a href="https://www.rfc-editor.org/info/rfc6960">https://www.rfc-editor.org/info/rfc6960</a>></span>. </dd>
<dd class="break"></dd>
<dt id="RFC7258">[RFC7258]</dt>
<dd>
<span class="refAuthor">Farrell, S.</span><span class="refAuthor"> and H. Tschofenig</span>, <span class="refTitle">"Pervasive Monitoring Is an Attack"</span>, <span class="seriesInfo">BCP 188</span>, <span class="seriesInfo">RFC 7258</span>, <span class="seriesInfo">DOI 10.17487/RFC7258</span>, <time datetime="2014-05" class="refDate">May 2014</time>, <span><<a href="https://www.rfc-editor.org/info/rfc7258">https://www.rfc-editor.org/info/rfc7258</a>></span>. </dd>
<dd class="break"></dd>
<dt id="RFC7340">[RFC7340]</dt>
<dd>
<span class="refAuthor">Peterson, J.</span><span class="refAuthor">, Schulzrinne, H.</span><span class="refAuthor">, and H. Tschofenig</span>, <span class="refTitle">"Secure Telephone Identity Problem Statement and Requirements"</span>, <span class="seriesInfo">RFC 7340</span>, <span class="seriesInfo">DOI 10.17487/RFC7340</span>, <time datetime="2014-09" class="refDate">September 2014</time>, <span><<a href="https://www.rfc-editor.org/info/rfc7340">https://www.rfc-editor.org/info/rfc7340</a>></span>. </dd>
<dd class="break"></dd>
<dt id="RFC7748">[RFC7748]</dt>
<dd>
<span class="refAuthor">Langley, A.</span><span class="refAuthor">, Hamburg, M.</span><span class="refAuthor">, and S. Turner</span>, <span class="refTitle">"Elliptic Curves for Security"</span>, <span class="seriesInfo">RFC 7748</span>, <span class="seriesInfo">DOI 10.17487/RFC7748</span>, <time datetime="2016-01" class="refDate">January 2016</time>, <span><<a href="https://www.rfc-editor.org/info/rfc7748">https://www.rfc-editor.org/info/rfc7748</a>></span>. </dd>
<dd class="break"></dd>
<dt id="RFC8174">[RFC8174]</dt>
<dd>
<span class="refAuthor">Leiba, B.</span>, <span class="refTitle">"Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words"</span>, <span class="seriesInfo">BCP 14</span>, <span class="seriesInfo">RFC 8174</span>, <span class="seriesInfo">DOI 10.17487/RFC8174</span>, <time datetime="2017-05" class="refDate">May 2017</time>, <span><<a href="https://www.rfc-editor.org/info/rfc8174">https://www.rfc-editor.org/info/rfc8174</a>></span>. </dd>
<dd class="break"></dd>
<dt id="RFC8224">[RFC8224]</dt>
<dd>
<span class="refAuthor">Peterson, J.</span><span class="refAuthor">, Jennings, C.</span><span class="refAuthor">, Rescorla, E.</span><span class="refAuthor">, and C. Wendt</span>, <span class="refTitle">"Authenticated Identity Management in the Session Initiation Protocol (SIP)"</span>, <span class="seriesInfo">RFC 8224</span>, <span class="seriesInfo">DOI 10.17487/RFC8224</span>, <time datetime="2018-02" class="refDate">February 2018</time>, <span><<a href="https://www.rfc-editor.org/info/rfc8224">https://www.rfc-editor.org/info/rfc8224</a>></span>. </dd>
<dd class="break"></dd>
<dt id="RFC8225">[RFC8225]</dt>
<dd>
<span class="refAuthor">Wendt, C.</span><span class="refAuthor"> and J. Peterson</span>, <span class="refTitle">"PASSporT: Personal Assertion Token"</span>, <span class="seriesInfo">RFC 8225</span>, <span class="seriesInfo">DOI 10.17487/RFC8225</span>, <time datetime="2018-02" class="refDate">February 2018</time>, <span><<a href="https://www.rfc-editor.org/info/rfc8225">https://www.rfc-editor.org/info/rfc8225</a>></span>. </dd>
<dd class="break"></dd>
<dt id="RFC8226">[RFC8226]</dt>
<dd>
<span class="refAuthor">Peterson, J.</span><span class="refAuthor"> and S. Turner</span>, <span class="refTitle">"Secure Telephone Identity Credentials: Certificates"</span>, <span class="seriesInfo">RFC 8226</span>, <span class="seriesInfo">DOI 10.17487/RFC8226</span>, <time datetime="2018-02" class="refDate">February 2018</time>, <span><<a href="https://www.rfc-editor.org/info/rfc8226">https://www.rfc-editor.org/info/rfc8226</a>></span>. </dd>
<dd class="break"></dd>
<dt id="RFC8446">[RFC8446]</dt>
<dd>
<span class="refAuthor">Rescorla, E.</span>, <span class="refTitle">"The Transport Layer Security (TLS) Protocol Version 1.3"</span>, <span class="seriesInfo">RFC 8446</span>, <span class="seriesInfo">DOI 10.17487/RFC8446</span>, <time datetime="2018-08" class="refDate">August 2018</time>, <span><<a href="https://www.rfc-editor.org/info/rfc8446">https://www.rfc-editor.org/info/rfc8446</a>></span>. </dd>
<dd class="break"></dd>
<dt id="RIPOSTE">[RIPOSTE]</dt>
<dd>
<span class="refAuthor">Corrigan-Gibbs, H.</span><span class="refAuthor">, Boneh, D.</span><span class="refAuthor">, and D. Mazières</span>, <span class="refTitle">"Riposte: An Anonymous Messaging System Handling Millions of Users"</span>, <time datetime="2015-05" class="refDate">May 2015</time>, <span><<a href="https://people.csail.mit.edu/henrycg/pubs/oakland15riposte/">https://people.csail.mit.edu/henrycg/pubs/oakland15riposte/</a>></span>. </dd>
<dd class="break"></dd>
<dt id="I-D.ietf-tls-subcerts">[TLS-SUBCERTS]</dt>
<dd>
<span class="refAuthor">Barnes, R.</span><span class="refAuthor">, Iyengar, S.</span><span class="refAuthor">, Sullivan, N.</span><span class="refAuthor">, and E. Rescorla</span>, <span class="refTitle">"Delegated Credentials for TLS"</span>, <span class="refContent">Work in Progress</span>, <span class="seriesInfo">Internet-Draft, draft-ietf-tls-subcerts-10</span>, <time datetime="2021-01-24" class="refDate">24 January 2021</time>, <span><<a href="https://tools.ietf.org/html/draft-ietf-tls-subcerts-10">https://tools.ietf.org/html/draft-ietf-tls-subcerts-10</a>></span>. </dd>
<dd class="break"></dd>
<dt id="I-D.jennings-vipr-overview">[VIPR-OVERVIEW]</dt>
<dd>
<span class="refAuthor">Barnes, M.</span><span class="refAuthor">, Jennings, C.</span><span class="refAuthor">, Rosenberg, J.</span><span class="refAuthor">, and M. Petit-Huguenin</span>, <span class="refTitle">"Verification Involving PSTN Reachability: Requirements and Architecture Overview"</span>, <span class="refContent">Work in Progress</span>, <span class="seriesInfo">Internet-Draft, draft-jennings-vipr-overview-06</span>, <time datetime="2013-12-09" class="refDate">9 December 2013</time>, <span><<a href="https://tools.ietf.org/html/draft-jennings-vipr-overview-06">https://tools.ietf.org/html/draft-jennings-vipr-overview-06</a>></span>. </dd>
<dd class="break"></dd>
</dl>
</section>
<div id="Acknowledgments">
<section id="section-appendix.a">
<h2 id="name-acknowledgments">
<a href="#name-acknowledgments" class="section-name selfRef">Acknowledgments</a>
</h2>
<p id="section-appendix.a-1">The ideas
in this document came out of discussions with <span class="contact-name">Richard Barnes</span> and
<span class="contact-name">Cullen Jennings</span>. We'd also like to thank
<span class="contact-name">Russ Housley</span>, <span class="contact-name">Chris Wendt</span>,
<span class="contact-name">Eric Burger</span>, <span class="contact-name">Mary Barnes</span>,
<span class="contact-name">Ben Campbell</span>, <span class="contact-name">Ted Huang</span>,
<span class="contact-name">Jonathan Rosenberg</span>, and <span class="contact-name">Robert Sparks</span>
for helpful suggestions.<a href="#section-appendix.a-1" class="pilcrow">¶</a></p>
</section>
</div>
<div id="authors-addresses">
<section id="section-appendix.b">
<h2 id="name-authors-addresses">
<a href="#name-authors-addresses" class="section-name selfRef">Authors' Addresses</a>
</h2>
<address class="vcard">
<div dir="auto" class="left"><span class="fn nameRole">Eric Rescorla</span></div>
<div dir="auto" class="left"><span class="org">Mozilla</span></div>
<div class="email">
<span>Email:</span>
<a href="mailto:ekr@rtfm.com" class="email">ekr@rtfm.com</a>
</div>
</address>
<address class="vcard">
<div dir="auto" class="left"><span class="fn nameRole">Jon Peterson</span></div>
<div dir="auto" class="left"><span class="org">Neustar, Inc.</span></div>
<div dir="auto" class="left"><span class="street-address">1800 Sutter St Suite 570</span></div>
<div dir="auto" class="left">
<span class="locality">Concord</span>, <span class="region">CA</span> <span class="postal-code">94520</span>
</div>
<div dir="auto" class="left"><span class="country-name">United States of America</span></div>
<div class="email">
<span>Email:</span>
<a href="mailto:jon.peterson@team.neustar" class="email">jon.peterson@team.neustar</a>
</div>
</address>
</section>
</div>
<script>const toc = document.getElementById("toc");
toc.querySelector("h2").addEventListener("click", e => {
toc.classList.toggle("active");
});
toc.querySelector("nav").addEventListener("click", e => {
toc.classList.remove("active");
});
</script>
</body>
</html>
|