-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdraft-ietf-anima-brski-discovery.xml
More file actions
4411 lines (3827 loc) · 239 KB
/
Copy pathdraft-ietf-anima-brski-discovery.xml
File metadata and controls
4411 lines (3827 loc) · 239 KB
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
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.8 (Ruby 2.6.10) -->
<!DOCTYPE rfc [
<!ENTITY nbsp " ">
<!ENTITY zwsp "​">
<!ENTITY nbhy "‑">
<!ENTITY wj "⁠">
]>
<?rfc compact="yes"?>
<?rfc iprnotified="no"?>
<?rfc strict="yes"?>
<rfc ipr="trust200902" docName="draft-ietf-anima-brski-discovery-09" category="std" consensus="true" submissionType="IETF" updates="draft-ietf-anima-brski-prm, rfc6690, rfc9733" tocDepth="5" tocInclude="true" sortRefs="true" symRefs="true">
<front>
<title abbrev="BRSKI-discovery">BRSKI discovery and variations</title>
<author initials="T." surname="Eckert" fullname="Toerless Eckert" role="editor">
<organization abbrev="Futurewei">Futurewei USA</organization>
<address>
<postal>
<country>USA</country>
</postal>
<email>tte@cs.fau.de</email>
</address>
</author>
<author initials="E." surname="Dijk" fullname="Esko Dijk">
<organization>IoTconsultancy.nl</organization>
<address>
<email>esko.dijk@iotconsultancy.nl</email>
</address>
</author>
<date year="2025" month="October" day="20"/>
<area>Operations and Management</area>
<workgroup>ANIMA</workgroup>
<keyword>Internet-Draft</keyword>
<abstract>
<?line 108?>
<t>This document specifies how to make BRSKI communications autoconfiguring, extensible and resilient
in the face of simultaneous use of different variations of the BRSKI protocol (BRSKI, BRSKI-AE,
BRSKI-PRM, constrained BRSKI, stateless constrained BRSKI proxies). This document
specifies a data model, IANA registry and BRSKI component procedures to achieve this.</t>
<t>This document does not define any new discovery methods. Instead, its data model allows
to signal all current (and future) variations of the BRSKI family of protocols consistently
via different existing network discovery mechanisms: DNS-SD, CoAP discovery (CORE-LF) and GRASP.
Additional/future discovery mechanisms can also be supported through the IANA registry.</t>
<t>Automatic resiliency and load-sharing are enabled through the use of discovery mechanisms and the
provisioning of multiple instances of BRSKI components such as registrars and Join Proxies. This document
specifies the procedures to support load-sharing and (fast) failover under failure and recovery of
redundant components.</t>
<t>Future proof deployments of BRSKI requires Join Proxies that automatically support any current and future
BRSKI variation. This document specifies the procedures how Join Proxies can support this through
specific Join Proxy protocol behavior and the use of discovery mechanisms.</t>
<t>The specification for discovery of pledges by their IDevID as introduced by BRSKI-PRM is refined in this document.</t>
</abstract>
</front>
<middle>
<?line 131?>
<section anchor="terminology"><name>Terminology</name>
<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
<?line -18?>
<t>This document relies on the terminology defined in <xref target="BRSKI"/>. The following terms are described partly in addition.</t>
<dl>
<dt>Context:</dt>
<dd>
<t>A set of Services for whom the same set of variations applies</t>
</dd>
<dt>IP, IPv4, IPv6:</dt>
<dd>
<t>In this document, IP refers to (inclusively) IPv4 or IPv6. If a statement applies to only one of the two versions, then the terms IPv4 or IPv6 are used.</t>
</dd>
<dt>Initiator:</dt>
<dd>
<t>A host that is using an IP transport protocol to initiate a connection or transaction to another host called the responder.</t>
</dd>
<dt>Initiator socket:</dt>
<dd>
<t>A socket consisting of an initiators IP address, protocol and protocol port number from which it
initiates connections or transactions to a responder (typically UDP or TCP).</t>
</dd>
<dt>Objective Name:</dt>
<dd>
<t>See Service Name.</t>
</dd>
<dt>Resource Type:</dt>
<dd>
<t>See Service Name.</t>
</dd>
<dt>Responder:</dt>
<dd>
<t>A host that is using an IP transport protocol to respond to transaction or connection requests from an Initiator.</t>
</dd>
<dt>Responder socket:</dt>
<dd>
<t>A socket consisting of a responders IP address, protocol and protocol port
number on which it responds to requests of the protocol (typically UDP or TCP).</t>
</dd>
<dt>Role:</dt>
<dd>
<t>In this document, functionality of an entity in a variation of BRSKI that can act as a responder and whose supported variations can be discovered. BRSKI roles relevant in this document include Join Registrar, Join Proxy and pledge. The IANA registry defined by this document allows to specify variations for any roles. See also Context.</t>
</dd>
<dt>Socket:</dt>
<dd>
<t>The combination of am IP address, an IP protocol that utilizes a port number (such as TCP or UDP) and a port number of that protocol.</t>
</dd>
<dt>Service Name:</dt>
<dd>
<t>The name for (a subset of) the functionality/API provided by a discoverable responder socket. This term is inherited from <xref target="DNS-SD"/> but unless otherwise specified also used in this document to apply to any other discovery functionality/API. The terminology used by other mechanisms typically differs. For example, when <xref target="GRASP"/> is used to discover a responder socket for BRSKI, the Objective Name carries the equivalent to the service name. In <xref target="CORE-LF"/>, the Resource Type (rt=) carries the equivalent of the service name.</t>
</dd>
<dt>Type:</dt>
<dd>
<t>See Variation Type.</t>
</dd>
<dt>Variation:</dt>
<dd>
<t>A combination one one variation choice each for every variation type applicable to the context of one discoverable BRSKI communications.
For example, in the context of BRSKI, a variation is one choice for "mode", one choice for "enroll" and once choice for "vformat".</t>
</dd>
<dt>Variation Type:</dt>
<dd>
<t>The name for one aspect of a protocol for which two or more choices exist (or may exist in the future), and where the choice
can technically be combined orthogonal to other variation types. This document defined the BRSKI variation types "mode", "enroll" and "vformat".</t>
</dd>
<dt>Variation Type Choice:</dt>
<dd>
<t>The name for different values that a particular variation type may have.
For example, this document does defines the choices "rrm" and "prm" for the BRSKI variation "mode".</t>
</dd>
<dt>ACP:</dt>
<dd>
<t>"An Autonomic Control Plane", <xref target="ACP"/>.</t>
</dd>
<dt>BRSKI:</dt>
<dd>
<t>"Bootstrapping Remote Secure Key Infrastructure", <xref target="BRSKI"/>.</t>
</dd>
<dt>BRSKI-AE:</dt>
<dd>
<t>"Alternative Enrollment Protocols in <xref target="BRSKI"/>", <xref target="BRSKI-AE"/>.</t>
</dd>
<dt>BRSKI-PRM:</dt>
<dd>
<t>"<xref target="BRSKI"/> with Pledge in Responder Mode", <xref target="BRSKI-PRM"/>.</t>
</dd>
<dt>cBRSKI:</dt>
<dd>
<t>"Constrained Bootstrapping Remote Secure Key Infrastructure (<xref target="BRSKI"/>)", <xref target="cBRSKI"/>.</t>
</dd>
<dt>COAP:</dt>
<dd>
<t>"The Constrained Application Protocol (CoAP)", <xref target="COAP"/>.</t>
</dd>
<dt>CORE-LF:</dt>
<dd>
<t>"Constrained RESTful Environments (CoRE) Link Format", <xref target="CORE-LF"/>.</t>
</dd>
<dt>cPROXY:</dt>
<dd>
<t>"Constrained Join Proxy for Bootstrapping Protocols", <xref target="cPROXY"/>.</t>
</dd>
<dt>DNS-SD:</dt>
<dd>
<t>"DNS-Based Service Discovery", <xref target="DNS-SD"/>.</t>
</dd>
<dt>EST:</dt>
<dd>
<t>"Enrollment over Secure Transport", <xref target="EST"/>.</t>
</dd>
<dt>GRASP:</dt>
<dd>
<t>"GeneRic Autonomic Signaling Protocol", <xref target="GRASP"/>.</t>
</dd>
<dt>GRASP-DNSSD:</dt>
<dd>
<t>"DNS-SD Compatible Service Discovery in GeneRic Autonomic Signaling Protocol (GRASP)", <xref target="I-D.eckert-anima-grasp-dnssd"/>.</t>
</dd>
<dt>JWS-VOUCHER:</dt>
<dd>
<t>"JWS signed Voucher Artifacts for Bootstrapping Protocols", <xref target="JWS-VOUCHER"/>.</t>
</dd>
<dt>lwCMP:</dt>
<dd>
<t>"Lightweight Certificate Management Protocol (CMP) Profile", <xref target="RFC9483"/>.</t>
</dd>
<dt>mDNS:</dt>
<dd>
<t>"multicast DNS", <xref target="mDNS"/>.</t>
</dd>
<dt>SCEP:</dt>
<dd>
<t>"Simple Certificate Enrolment Protocol", <xref target="RFC8894"/>.</t>
</dd>
</dl>
</section>
<section anchor="overview"><name>Overview</name>
<section anchor="challenges"><name>Challenges</name>
<t>BRKI was designed to support multi-vendor deployments ideally with zero additional
provisioning in the network just to support BRSKI. In recent years, multiple
variations of the BRSKI protocol where specified, sich as <xref target="BRSKI-PRM"/>,
<xref target="BRSKI-AE"/>, <xref target="cBRSKI"/> and <xref target="cPROXY"/>; within these documents that are multiple
options that need to be supported by all BRSKI entities involved in a BRSKI
enrollment, such as pledge, proxy and registrar.</t>
<t><list style="numbers">
<t>Assume for example a registrar from vendor A is deployed in an enterprise network
or manufacturing plant to support a variety of pledges from an ecosystem of vendors all
using the vendor A registrar, and a particular subset of BRSKI protocol variations.
Later, it becomes necessary to also deploy various pledges from a different ecosystem.
Vendor B provides a registrar for this ecosystem, but they do use some slight variation
of BRSKI. Now the proxies deployed through either the A or B ecosystem discover either
registrars A or B and randomnly pick one. And in case they pick the wrong registrar,
enrollment for the pledge will fail because the proxy variation of BRSKI is not compatible
with the variation(s) supported by the choosen registrar. <vspace blankLines='1'/>
Now the proxy implementations coming either from A or B start to fix up the issue
by introducing some proprietary extension to only discover "their" type of registrar.
Now a pledge from the A ecosystem can only be enrolled behind an A proxy and a B pledge
only behind a B proxy. The network operator now falls into the next trap: It is not
possible anymore to have networks where both A and B pledges can be enrolled, because
it is physcially not possible or financially feasible to deploy both A and B proxies.
Or if they are deployed, pledges would only randomnly pick the right pledge.</t>
<t>Some use-case community wants to introduce a new variation aspect, such as introducing
a new encoding method for the message exchanges or a different certificate enrollment
protocol. But now this aspect can be combined with any possible other aspect of BRSKI.
And without appropriate planning upfront this ends up in more chaos of ad-hoc definition
every time some ecosystem prefers one specific variation of options.</t>
<t>As if variations where not difficult enough, networks may only support one specific
autodiscovery protocol, and specific variations did not bother to define how their
variation of BRSKI could be discovered by another discovery protocol mechanism.
So that variation then invents yet another one-off way to discover its variation
in this new type of discover method in this now more important type of networks.</t>
</list></t>
<t>The following sub-sections attempt to more formally describe the different challenges
in a technically more precise language.</t>
<section anchor="signaling-brski-variation-for-responder-selection"><name>Signaling BRSKI variation for responder selection.</name>
<t>When an initiator uses a discovery mechanism such as <xref target="DNS-SD"/>
to discover an instance of the service that it intends to connect to, it may discover more than one such instance.</t>
<t>For example, BRSKI pledges want to discover Join Proxies or registrars.
In the presence of variations of the BRSKI mechanisms that impact interoperability, performance
or security, not all discovered instances may support exactly what the initiator needs to achieve
interoperability or they may not provide the best desired metric. To support choosing the best
interoperable responder, the discovery mechanism needs to carry the necessary
additional information beside the service name that indicates the service/role of the responder.</t>
</section>
<section anchor="consistent-support-for-variations-across-different-discovery-mechanisms"><name>Consistent support for variations across different discovery mechanisms.</name>
<t>Different BRSKI deployments may prefer different discovery mechanisms, such as <xref target="DNS-SD"/>, <xref target="GRASP"/>,
<xref target="CORE-LF"/> or others. Any variation in discovery already defined for one discovery mechanism usually
has to be re-specified individually for every other discovery mechanism. This makes it often cumbersome
to select the preferred discovery mechanism for a specific type of deployment, because such additional
specification work can take a long time. Indepedent specification of variations for different
discovery mechanisms can also easily lead to inconsistencies and hence the inability to equally
support all variations across all discovery mechanisms.</t>
</section>
<section anchor="variation-agnostic-support-for-join-proxies"><name>Variation agnostic support for Join Proxies</name>
<t>Pledges or Agents often need to connect to a registrar that supports the variation of BRSKI
supported by the pledge or Agent via a Join Proxy. The Join Proxy needs to discover registrars
and the variations they support and then announce themselves to pledges or Agents accordingly
so that when the pledge or Agent connects to the Proxy that it will connect it to the right
registrar.</t>
<t>This document defines variations so that Join Proxies can be implemented and operated agnostic
of variations: When a Join Proxy supports one variation for a particular IP version and transport
(TCP, UDP stateful/stateless), than it can support all current and future variations for the
same IP version and transport without the need for Join Proxy software or configuration updates.</t>
<t>To support agnostic implementations, variations can only differ in the payload of messages carried
across those TCP/UDP connections, but not the transport mechanisms used. New transport mechanisms can not be
variations, but need to be so-called contexts.</t>
<t>The choice of encoding of variations into different discovery methods also needs to ensure that it
can be discovered by legacy Join Proxy implementations.</t>
<t>Initial support for variations in proxies does create additional coding effort:
When a pledge or Registrar-Agent connects to a Join Proxy with the need to use a specific variation
on a registrar, then the Join Proxy needs to understand which variation that is, so that it can connect
the pledge or registrar to a registrar supporting that variation. This requires that proxies create
per-variation responder sockets.</t>
</section>
</section>
<section anchor="functional-summary"><name>Functional Summary</name>
<t>This document specifies a set of IANA registry tables for BRSKI. These tables allow to define
the attributes for different registry mechanisms to announce and discover different BRSKI role
responders as well as their variations. Defining these via registry tables maximizes consistency
across discovery mechanisms and eases support of variations across different discovery
mechanisms.</t>
<t>Using the discovery information specified through these tables, this document specifies
details of selection and fail-over when discovering more than one interoperable and available responder,
These procedures intend to provide resilience and scalability of BRSKI services not possible without dynamic
discovery mechanisms.</t>
<t>Finally, this document specifies procedures for Join Proxies to discover variations of registrars
using any discovery mechanism, annnounce them to pledges - and connect a pledge accordingly
to the right registrar based on the variation required by the pledge. These procedures allow
to introduce new variations of BRSKI without need to upgrade proxies.</t>
</section>
</section>
<section anchor="specification"><name>Specification</name>
<section anchor="data-model"><name>Data Model</name>
<t>BRSKI Discovery is about discovery of one or more instances of responders supporting
a specific BRSKI role - and determining whether that responders variation of BRSKI protocol
options is compatible with / desired by the connection initiator. This section gives
the conceptual overview of how this is achieved.</t>
<section anchor="roles-and-services"><name>Roles and Services</name>
<t>In this document, a service is a specific functionality provided by a responder over
a network socket using a particular transport/security/session stack (such as TCP, UDP, COAP, DTLS).</t>
<t>In this document, a role is functionality performed by a BRSKI entity either as an initiator or responder.
<xref target="BRSKI"/> defines the roles of pledge, Join Proxy, registrar, MASA. <xref target="BRSKI-PRM"/>
adds the role Registrar-Agent. Trust anchor is a dependent role required by BRSKI, provided
through <xref target="EST"/> or other protocols in <xref target="BRSKI-AE"/>.</t>
<t>A single entity may implement multiple roles such as registrars that also often implement
the Join Proxy Role or pledges which change stop being a pledge after enrolment but often
then become Join Proxies. Future BRSKI documents may introduce additional roles and many of the definitions in this
document should be extensible to also support such additional roles.</t>
<t>In this document a service is functionality performed as a result of a network connection
from an initator to a responder. The service is commonly named after the role name of the responder,
such as Join Proxy, registrar or MASA.</t>
</section>
<section anchor="service-names"><name>Service Names</name>
<t>The role that a responder socket supports is indicated in each discovery mechanism through an
appropriate signalling element. <xref target="DNS-SD"/> calls this signalling element the Service Name. Due to
the absence of another equally widely used term for this type of signalling element across arbitrary
discovery mechanisms, this document also refers to the role signaling element as the service name,
independent of the discovery mechanism. IP Address, IP transport protocol and IP transport
protocol port are not part of the Service name and signalled across discovery mechanisms specific signaling elements.</t>
</section>
<section anchor="variations"><name>Variations</name>
<t>Variations in the BRSKI protocol such as the choice of encoding of messages or features
could impact interoperability between initiator and responder. Initiators
need be able to discover and select responders based not only on the desired role,
but also based on the best variation for the initiator.</t>
<t>Variations of a role could be indicated by using a different Service Name for every variation,
but that approach would have two challenges</t>
<t><list style="numbers">
<t>Service Names in different discovery mechanisms are typically not hierarchical (e.g.: not
"role.variation"). Relying only on Service Names would thus require the registration for
every variation as a separate Service Name in a "flat" name space; and register them once for each discovery mechanism.
In addition, not all discovery mechanism registry rules may look favorably at the registration
of Service Names for such protocol variations.</t>
<t>Whenever a new variation is introduced, all deployed BRSKI proxies would need to be configured
to also proxy this new variation - because new Service Names for the same BRSKI role can
be auto discovered by proxies (without additional protocol mechanisms that would be more
complex than the variations approach). Most Join Proxies should be able to operate without
configuration though.</t>
</list></t>
<t>For these reasons, this document introduces the encoding of BRSKI (role) variations
through a secondary signaling element in each discovery method, enabling proxies to transparently
support any variation of BRSKI role connections for which they supports proxying.</t>
<t>In addition, variations only need to be registered once in a BRSKI specific registry table introduced
by this document, and not once for each current or future discovery method.</t>
<t>A variation is hence specified as describing a combination of signaling choices that a BRSKI connection may
use and that impacts interoperability between initiator and responder at the message
exchange and encoding level.</t>
</section>
<section anchor="variation-types"><name>Variation Types</name>
<t>Today, BRSKI connections can exchange vouchers in one out of multiple different
encoding formats. Independent of that option, the BRSKI connection may also use different
commands (so called "Endpoints"). Today, these are based on whether <xref target="BRSKI-PRM"/> is used or not.
Finally, and also independent of those two options, the BRSKI connection may use one out of multiple
different enrollment protocol options.</t>
<t>This document calls these options "Variation Type", and the above three variation types
are called "vformat" for the voucher format, "mode" for the Endpoints being used (such as
PRM or not), and "enroll" for the enrollment protocol used.</t>
</section>
<section anchor="variation-type-choices"><name>Variation Type Choices</name>
<t>The actual choices for each of these variation types are hence called "Variation Type Choices":
"prm" or "rrm" for the variation type "mode". "cmsj", "cose" or "jose" for the variation type "vformat".
"est", "cmp" or "scep" for the variation type "enroll".</t>
<t>"scep" is an example for the ability of the registration to reserve values: it is not adopted
by any current BRSKI specification.</t>
</section>
<section anchor="variation-strings"><name>Variation Strings</name>
<t>The string name of a variation is as a string concatenating a single variation type choice for every
(necessary) variation type. For example "rrm-cmsj-est" could be describing the protocol options
used by a <xref target="BRSKI"/> connection pledge to registrar - potentially through a Join Proxy. This string
representation of a variation is called the variation string and it is consistently
used for signalling across any discovery mechanisms.</t>
<t>When in the future, additional variation types and choices are introduced, existing variation
strings must not be changed to allow full backward compatibility with existing/deployed implementations.</t>
<t>For example, when using BRSKI over UDP, today only COAPS is supported, but BRSKI UDP sockets
could equally work with QUIC (which runs on top of UDP). At that time, a new variation type of e.g.: "proto"
could be introduced with variation type choices "coaps" and "quic". For backward compatibility,
"coaps" then needs to be defined to be the default for BRSKI over UDP, which means that
existing variation strings such as "rrm-cmsj-est" imply the use of "coaps", whereas the use
of QUIC would have to be indicated explicitly via "rrm-cmsj-est-quic".</t>
<t>For variation strings to be semantically unambiguous, the variation type choices across all
variation types have distinct names, and the order in which variation type choices are
concatenated is the order in which variation types are defined in the according registry
table. Hence new variation type choices have to be tail added to the registry table.</t>
<t>Just because a variation name is composed from variation type choices does not mean that
an unspecified variation of (random) variation type choices can work without new implementation
or specification. Or even make sense. This may be the case, or it may not. This is also the reason
why this document specifies a registry that explicitly enumerates all variations that are
known to have sufficient specification and will work.</t>
<t>For example, <xref target="BRSKI-PRM"/> is indicated through the variation type value "prm", but it may also requires
enhancements to the enrolment protocol used, which is specified in the variation type "enroll", such as
new endpoints in that protocol. The required functional semantic implied by the "enroll" variation type
value in variations with "prm" is thus a different one than in variations not using "prm". And
<xref target="BRSKI-PRM"/> does not necessarily sufficiently specify these enhancements for enrollment protocols
that may not have been known or specified by the time <xref target="BRSKI-PRM"/> was written.</t>
</section>
<section anchor="contexts"><name>Contexts</name>
<t>Variation strings are defined separately for every group of services for which the
set of variation strings is or could be different or could have different semantics.
A group of services for which the same variation strings are defined is called a Context.</t>
<t>Different list of variation strings are necessary when services have different variation types,
different variation type values, different deployed variations or different defaults
for the same variation type values and hence different variation strings.</t>
<t>"tBRSKI" is the context covering <xref target="BRSKI"/> connections (which are using TCP, hence the "t") from pledge to Join Proxy or registrar and from Join Proxy to registrar connections.</t>
<t>"cBRSKI" ("c"onstrained BRSKI) is the context covering <xref target="cBRSKI"/>
connections (using UDP) from pledge to Join Proxy or registrar and from Join Proxy to registrar connections.</t>
<t>"BRSKI-PLEDGE" is the context covering pledges using <xref target="BRSKI-PRM"/> for connections
from Registrar-Agents to pledges. It can equally cover in the future through variations the discovery of
<xref target="BRSKI"/> pledges for connections to them for other purposes - by introduction of
appropriate variation types and values for such additional purposes.</t>
<t>This document does not define variations for different end-to-end encryption mechanisms.
However, the mechanisms described here can also be used to introduce backward incompatible new secure transport options.</t>
<t>Also, this document does not introduce contexts for discovery of other BRSKI roles beyond those mentioned,
such as discovery discovery of MASA by registrars. However, the registries introduced by this document are defined such
that those can be introduced later as well through additional registry entries and specifications.</t>
</section>
<section anchor="discussion"><name>Discussion</name>
<t>Variations as defined by this document only cover protocol options that proxies can
transparently support so that the definition of variations allows to make proxies automatically
extensible.</t>
<t>Other responder selection criteria such as different responder priority or performance based selection
(called weight in <xref target="DNS-SD"/>) are not covered by the variation concept but can
be used without change in conjunction with variations. Some selection criteria may also only work with
discovery mechanisms that rely on specific procedures. Network distance to responder can for example
only be well supported by discovery mechanisms that can support per-hop forwarding between initiator
and responder, such as <xref target="GRASP"/>. Any of these criteria will work unchanged with the introduction
of Variations. Variations are simply one more selection criteria.</t>
<t>Differences in the supported transport stack of a responder are typically included as a
signaling element of the discovery method: Whether TCP or UDP or another IP transport protocol
is used, and whether the responder uses IP or even another network layer protocol.</t>
<t>In "sane" services where a change in transport spec does not imply a change in signalled messages
and their semantics, gateways could transparently proxy from IP and vice versa or
even between TCP and some other IP transport protocols such as SCTP. However, this is out of
scope of this specification.</t>
<t>The procedures specified in <xref target="cPROXY"/> would allow not only to
run a transport stack of COAP over DTLS, but equally any other transport stack over UDP, such
as QUIC - without any changes to the Join Proxy implementation or configuration when following
the procedures described in this document. All that is needed would be to introduce appropriate
registration entries for the registry tables specified in this document (e.g.: add new Variation Type
for transport and choices such as "coaps" or "quic" ).</t>
</section>
<section anchor="iana-registry-tables"><name>IANA Registry Tables</name>
<t>This sub-section re-states and summarizes the desired Data Model introduced before in it's
instantiation of the IANA Registry (and sub-registries) requested by this document,
the so-called "BRSKI Discovery Parameters" registry (<xref target="reg-discovery"/>).</t>
<t>The detailled requirements for registrations and initial content of the registry tables are
defined in the IANA section for it.</t>
<section anchor="discovery-mechanisms-registry"><name>Discovery Mechanisms registry</name>
<t>The main Discovery Parameters table ({#reg-discovery}) simply defines the abbreviations
for the Discovery Mechanisms specified for use with BRSKI Discovery: CORE-LF, DNS-SD and GRASP.
It allows to add new Discovery mechanisms and track where they are specified - including
outside the IETF.</t>
<t>This table is called the "main" table because the "BRSKI Discovery Parameters" is a
registry with sub-registries and one table has to be associated with the registry itself
instead of a sub-registry.</t>
</section>
<section anchor="contexts-sub-registry"><name>Contexts sub-registry</name>
<t>The IANA "Contexts" sub-registry, <xref target="subreg-contexts"/> registers names for different
groups of services in the overall BRSKI framework: BRSKI for <xref target="BRSKI"/> Registrar->Proxy->Pledge,
cBRSKI for constrained BRSKI (<xref target="cBRSKI"/> / <xref target="cPROXY"/>)
Registrar->(Proxy)->Pledge, and BRSKI-PLEDGE for <xref target="BRSKI-PRM"/> discovery of pledges.</t>
<t>Grouping services allows to limit registrations/definitions in other registry tables to
these Contexts as opposed to repeating them for every service (Registrar, Statelss-Registrar, Proxy
for example).</t>
<t>Distinguishing BRSKI from cBRSKI is also necessary so that the different Transport Stack
parameter(s) between the two can be appropriately included into the registries (see <xref target="subreg-service-names"/>)</t>
<t>The Contexts sub-registry also registers the list of Variation Types defined for each context.
The Variation Types are the different aspects of the BRSKI protocols for which different
choices have been specified or could be specified.</t>
</section>
<section anchor="service-names-sub-registry"><name>Service Names sub-registry</name>
<t>The IANA "Service Names" sub-registry, <xref target="subreg-service-names"/> registers the "Service Names"
used to discovery the different BRSKI services for each context and Discovery Mechanism. It also
specifies the necessary (Transport Stack) Parameters that needs to be used in the discovery
mechanism to indicate (discover or recognize in discovery replies) the service. In the
initial table as specified by this document this is primarily used to distinguish BRSKI
services which use TCP and cBRSKI services which use coaps, also represented as UDP in
some discovery mechanisms (such as DNS-SD).</t>
</section>
<section anchor="variation-type-choices-sub-registry"><name>Variation Type Choices sub-registry</name>
<t>The "IANA Variation Type Choices", <xref target="subreg-choices"/> depends on the definition of Variation Types
from the Contexts sub-registry, <xref target="subreg-contexts"/> by defining the specified choices for each
Variation Type and registers the specification(s) where they are defined.</t>
<t>Registration of a Variation Type Choice is per Context, so that different Contexts can
have different specification (and hence procedures) for the same Variation Type. In
the initial registry content requested by this document, this is used to refer to the
separate specification for BRSKI variations and cBRSKI variations.</t>
</section>
<section anchor="variations-sub-registry"><name>Variations sub-registry</name>
<t>The IANA "Variations" sub-registry, <xref target="subreg-variations"/> registers the so-called "Variation String"
encoding of variations of BRSKI protocols services for each Context. This is ultimately the
encoding specified in this document to be used to signal across all Discovery Methods the
actual Variations supported by a Service Instance. This sub-registry depends on the definitions
of the prior registry tables, which is why it is last.</t>
<t>A Variation is a combination of one Variation Type Choice for every Variation Type. Effectively,
it describes one way that a particular BRSKI service can operate. With the Variation Types
"mode", "vformat" (voucher format) and "enroll" (enrollment protocol) specified in this
document, it is possible to specify a Variation that has a different overall procedure: "mode"
can be "rrm" to indicate the pledge driven progression of BRSKI (as in <xref target="BRSKI"/> and
<xref target="cBRSKI"/>) or the "prm" Variation Type Choice as specified
in <xref target="BRSKI-PRM"/>. "vformat" specifies one one the encoding options possible
for the vocher exchanged in BRSKI, and "enroll" specifies the enrollment protocol, which
logically is separate from BRSKI but factually included into BRSKI because it so far not only
shares most of the time the secure Pledge to Registrar connection, but it also is an
interoperability requirement between Registrar and Pledge: Both need to support the same
encoding for a BRSKI exchange to finish successfully.</t>
<t>Some Variation Type Choices may actually impact other Variation Types, for example, "prm"
does impact also details relating to the enrollment protocol, and <xref target="BRSKI-PRM"/>
accordingly speficies how the <xref target="EST"/> ("enroll" = "est") needs to be modified to operate
"prm". For this reason, the Variations sub-registry only enlists Variations that
are explicitly specified somewhere as actually being a working combination of Variation
Type Choices. Instead of simply permitting implementations to announce all the Variation
Type Choices seprately - and hope any combinations actually do work.</t>
<t>Variations are encoded as Variation Strings which are combined by concatenating the
Variation Type Choice strings with "-", leaving out those Variation Type Choices that
are the "Default" (Dflt in the sub-registry). This encoding scheme allows to maintain
unchanged old Variation Strings when introducing new Variation Types in a backward
compatible fashion. The backward compatible choice for a new Variation Type is marked
as "Dflt", does hence not need to be included in the Variation Type Choice, and hence
th pre-existing Variation Strings without the new Variation Type can continue to
exist and be used without changes.</t>
</section>
</section>
</section>
<section anchor="redundant-discovery-and-selection"><name>Redundant Discovery and Selection</name>
<t>The following subsections describe requirements for resilient and scalable responder
selection. Resilience is supported by automatically selecting the currently best available
responder. Scalability of simultaneous sessions is supported through distributing the connections from multiple
initiators to different responders if so desired through operator configuration of the
discovery methods parameters.</t>
<t>At the time of this specification, the relevant initiators are BRSKI pledges, Join Proxies and Registrar-Agents,
the relevant responders are Join Proxies and BRSKI Registrars. Nevertheless, the rules defined
in this document can equally apply to other BRSKI connections if and when discoverable and redundant
services are desired and added to the registries created by this document. For example discovery of MASA by BRSKI
Registrars.</t>
<t>Note that this specification does not mandate support for specific discovery methods in BRSKI
implementations, because this is specific to the target deployment scenarios - hence the
option to support different discovery methods.</t>
<t>Note that while pledges are discoverable in the context of this documents technologies, this section
and its subsections do not apply to discovery of pledges because there is no redundancy involved,
and selection of pledges is also only by their ID and not by their supported variation.</t>
<section anchor="responder-selection"><name>Responder Selection</name>
<t>If more than one responder is discovered by an initiator, then the initiator
<bcp14>SHOULD</bcp14> support to sequentially attempt to connect to each feasible responder exactly once until
it successfully connects to one. If it fails to connect to any feasible responder,
the initiator <bcp14>SHOULD</bcp14> wait until at least 30 seconds have elapsed since the start of the
last round and update its discoverable responder information from the discovery mechanism
if that is not already happening automatically by the chosen discovery method before it
restarts connection attempts.</t>
<t>A responder is feasible if it supports one or more of the variations requested by the inititor.</t>
<t>The order of responders to attempt connections to is derived from two criteria: preference and weight.</t>
<t>Preference order is foremost determined by the responders preference across the variations it
supports. Within the set of of responders with the same preference by the initiator because of their
variation, the preference is further determined from discovery method specific preference
parameters such as the "priority" parameter in DNS-SD, or possible future distance
parameters in discovery mechanisms like GRASP.</t>
<t>If a responder socket offers more than one variation supported by the initiator
its preference order is calculated from the most preferred variation supported by it.</t>
<t>Within a set of two or more responders with the same preference, the initiator <bcp14>MUST</bcp14> pick at random,
especially after power-on or other reboot events. This is to ensure that those events have
the chance to overcome possible persistent problems when persistently choosing the same
first responder. If deployments desire reproducable and predictable ordering of connection
attempts by initiators then they have to use the discovery specific mechanisms, such
as a different priority" parameter for each responder in DNS-SD to create such a strict
ordering across the different responder.</t>
<t>Initiators <bcp14>SHOULD</bcp14> support to take discovery mechanism specific weighting
into account when determining the order of responders with the same preference,
such as the "weight" parameter in DNS-SD.</t>
<t>Support for the so far described resilient selection of responders <bcp14>SHOULD</bcp14> support
selection amongst at least 4 and no more than 10 responders with one or more
supported variation for each supported IP address family (v4 and/or v6). If more responders
are discovered for the preferred variation(s) of the initiator, then it <bcp14>SHOULD</bcp14> pick
a random subset of those responder announcements to select from.</t>
<t>4 Responders for a specific variation are a typical minimum resilience setup in a larger
network setup, in which 2 responders serve as redundancy at the responder host level and
the other 2 responders provide redundancy against network connectivity failure to those
first two responders. Intra-DC and Inter-DC service redundany is a simple example of such a setup.</t>
</section>
<section anchor="service-announcements"><name>Service Announcements</name>
<t>Responder selection as described in <xref target="responder-selection"/> needs to deal with
unresponsive responders because service announcements may be stale. This happens when
service announcements only loosely track aliveness of a service process.</t>
<t>In typical implementations, service announcement may be activated when the
service process starts, and stopped, when it stops. Problems such as a hanging (unresponsive)
service process will not be reflected in the service announcement setup. In addition,
caching of service announcements, such as through the DNS TTL field are a further
possible cause of assuming service aliveness that is not correct. Only actual
connection probing or other similar tracking can determine if a service responder is responsive
to the level of accepting connections.</t>
<t>Responders intended to be used in resilient deployments <bcp14>SHOULD</bcp14> therefore ensure
that their service announcements are not active when the responder died or would
have failed to successfully accept connection for 120 seconds or more. This can
be implemented for example by connection probing once every 30 seconds and
withdrawing the service announcements when this fails or by other forms
of tracking responsiveness of the responder functionality.</t>
<t>The better service announcements indicate actual aliveness of the service instances, the
faster service selection will be. In addition, in large networks, backup/standby
service instances can then be implemented by tracking primary service announcemements
and activating the backup only when the primary ones fail. Such dynamic backup
can further reduce the overall load on the discovery mechanism system used and
on initiators.</t>
</section>
<section anchor="proxy-selection"><name>Responder Selection in Proxies</name>
<t>Unless amended by the requirements listed below, proxies <bcp14>SHOULD</bcp14> follow all the
descripton from <xref target="responder-selection"/>. Note that the randomn selection of
responders with the same preference also applies to stateful proxies and ensures
load balancing (including weighting) across multiple simultaneously connecting pledges.</t>
<t>Stateful proxies <bcp14>SHOULD</bcp14> optimize selection of responders for each variation across
connections for multiple pledges instead of starting the sequence of responders
to try from the highest precedence anew for every new connecting pledge - and repeatedly run
into timeouts for each new connecting pledge when those primary responders time out
on connection attempts because they are unresponsive or unreachable. Instead, after a
responder first fails to connect, the Join Proxy <bcp14>SHOULD</bcp14> skip this responder in further
connection attempts for other connecting pledges.</t>
<t>Stateless proxies cannot learn unresponsiveness or unreachability of a responder
through connection attempts. Instead, they <bcp14>SHOULD</bcp14> perform a stateless responsiveness/reachability
check for each responder that the Join Proxy is actively forwarding packets to from
one or more pledges. If no packets are returned from such a responder over a period of more
than 30 seconds, then the responder <bcp14>SHOULD</bcp14> be considered unreachable for at least
180 seconds. Unreachability signaling received in response to packets sent to the
responder <bcp14>SHOULD</bcp14> trigger this unreachability status after it persists for 10 seconds.</t>
<t>Load balancing as described in <xref target="responder-selection"/> is <bcp14>NOT RECOMMENDED</bcp14> for
stateless proxies because per-pledge stateless load balancing may involve more
processing complexity than feasible for proxies on
constrained devices. To avoid changing the selection of
active responders when one responder becomes unresponsive, a "stable hash" approach would have
to be used, such as described in <xref target="HRW98"/>, which is used for example by <xref target="I-D.ietf-bess-evpn-fast-df-recovery"/>.
Supporting weights with stateless proxying is even more complex. Instead of
load balancing, responders simply need to be designed to scale to the maximum
amount of simultaneous initiator connections necessary when supporting stateless
proxying mode.</t>
</section>
<section anchor="announcement-protection"><name>Protection against malicious service announcements</name>
<t>Initiators including proxies <bcp14>SHOULD</bcp14> always pick the highest possible priority and weight
parameters possible in the discovery mechanism used that allows to support the
desired preference goals. For example, any primary initiator should select the highest
numerical values possible.</t>
<t>This recommendation is intended as a protection against erroneous, but not malicious
service announcements whenever the default priorities are lower than the maximum
priority. It can also serve as a weak protection against malicious announcements
because with the selection rules required by this document, initiators still have
the highest chance of picking the non-malicious announcement.</t>
<t>While being weak, this recommendation can still be better than nothing against such
malicious announcement. These recommendations <bcp14>SHOULD</bcp14> be superseded by better
recommendations for more narrowly scoped deployment scenarios.</t>
</section>
</section>
<section anchor="join-proxies-support-for-discovery-and-variations"><name>Join Proxies Support for Discovery and Variations</name>
<section anchor="proxy"><name>Join Proxy support for Variations</name>
<t>A Join Proxy compliant with this specification <bcp14>MUST</bcp14> support announcing its
Join Proxy responder socket(s) to which pledges can connect via at least one
of the discovery methods included in the registry tables specified in this
document. The Join Proxy <bcp14>MUST</bcp14> announce the variation(s)
supported on its responder socket(s) according to the registry table entries.</t>
<t>A Join Proxy <bcp14>SHOULD</bcp14> support to pass packets for any variation for which
it has discovered one or more registrar sockets supporting that variation without the
need for the variation to be known at the time of implementation of the Join Proxy
or configured on the Join Proxy. If a Join Proxy supports this requirements, this is
called support for "arbitrary variations". Supporting this requirement requires
the Join Proxy to discover registrar(s) and their supported variation(s) via one or more
of the discovery mechanisms included in the registry tables specified in this document.</t>
<t>Arbitrary variations support allows to deploy proxies once and add
pledges and registrars supporting new variations later - without upgrade
or change of configuration of proxies.</t>
</section>
<section anchor="registrar-operations-modes"><name>Registrar Operations Modes</name>
<t>Proxies may use different approaches to connect to registrars. The following
subsections discuss the primary relevant options.</t>
<section anchor="direct-connection"><name>Direct Connection Mode</name>
<t>In one Join Proxy implementation option called "direct connections", the Join Proxy creates for every discovered registrar
socket a separate Join Proxy responder socket. It announces this socket with the same set of parameters
as it did learn from the registrar's service announcement, except for the appropriate Join Proxy service name
and socket parameters (IP address, port number). When a pledge connects to that socket, the
Join Proxy passes traffic for that pledge's connection to and from the respective registrar socket.</t>
<t>When using the direct connections approach, the task of selecting the best registrar socket for
a particular variation is left to pledges because they are exposed to at least the same number
of service announcements from proxies as proxies see service announcements from registrars - and the
pledge has to select the best available one from them.</t>
<t>To reduce the number of sockets that have to be announced by proxies when using direct connections
and to also reduce the number of responder sockets that need to be maintained by a Join Proxy operating
in this approach, these proxies <bcp14>SHOULD</bcp14> limit the number of registrar sockets they maps to between 4 and 10
best registrar sockets as described in <xref target="responder-selection"/> per variation.</t>
</section>
<section anchor="best-registrar"><name>Best Registrar Selection Mode</name>
<t>In the implementation mode "best registrar selection", the Join Proxy creates a separate responder socket
for a set of all registrar sockets that it discovers and that announce support for the same set
of variations.</t>
<t>For pledges to discover the Join Proxy, the Join Proxy then announces this socket with the parameters of
the best discovered registrar socket, replacing the service name and network parameter names with those
for its Join Proxy responder socket as in the case of a direct connection.</t>
<t>The Join Proxy then connects pledges to the best available registrar socket from that set when
it receives a connection to that socket.</t>
<t>When performing best registrar selection for that connection, the Join Proxy has to perform selection of the
best availalable responder as described in <xref target="responder-selection"/>.</t>
<t>Using newly discovered responders in stateless proxies supporting best registrar selection must be done carefully.
Consider the common case that service announcements for a primary responder
did stop due to network issues, now the Join Proxy starts to send packets to a secondary
responder, and then the primary responder becomes reachable and the Join Proxy sees
service announcements for it. If the Join Proxy would now start to forward packets
from pledges to this primary responder due to its higher precedence, then this
could unnecessarily break ongoing connections from clients whose packets
are currently forwarded to the lower preference Join Proxy. Direct connection mode does
not incur this problem, because the pledge can select another Join Proxy responder socket
when it discovers the first one to be unresponsive or erroneous.</t>
<t>Replacing a selected responder in a stateless Join Proxy with a better one
<bcp14>SHOULD</bcp14> hence only be done if no packets have been exchanged between pleges
and the current selected responder through the Join Proxy for more than 300 seconds.
This long timeout specifically intends to not break connections in which the
registrar keeps the pledge waiting for an administrative response such as
an operator performing a policy validation for enrollment.</t>
<t>In addition, stateful proxies implementing best registrar selection <bcp14>SHOULD</bcp14>
optimize selection of registrar for each Join Proxy responder socket across
connections for multiple pledges instead of starting the sequence of responders
to try anew from the highest precedence registrar for every new connecting pledge - and repeatedly run
into timeouts when one or more of the best registrar time out on connection attempts
because they are unresponsive or unreachable. Instead, after a
responder first fails to connect, the Join Proxy <bcp14>SHOULD</bcp14> skip this responder in further
connection attempts for other connecting pledges and re-consider it only for new
connection attempts after at least 60 seconds.</t>
</section>
<section anchor="proxy-in-service-name-only-mode-on-registrars"><name>Proxy in Service Name Only Mode on Registrars</name>
<t>Registrars that implement support for connections from stateful proxies
and/or from pledges may minimize their Join Proxy implementation work by only implementing
the appropriate service name announcements for the same socket to support
connections from both: announcements as a registrar for connections from
proxies and announcements as a Join Proxy for connections from pledges.
No additional sockets or other Join Proxy specific packet processing code
is required to support this.</t>
<t>Registrars that implement support for connections from stateless proxies can
share that implementation for connections from pledges by also implementing
simple UDP<->JPY header conversion (see <xref target="cPROXY"/>).
Nevertheless, they do need to do this via
a separate socket and hence need to announce the two sockets separately:
UDP for connections from pledges with the Join Proxy service name, and UDP with JPY header for
connections from stateless proxies with the stateless registrar service name.</t>
<t>Proxy functionality that is implemented as described here on registrars
is called "proxy in service name only mode", because such an implementation
cannot discover, select and fail over between different registrars.
Such proxies in name only therefore do not share requirements
against discovering and selecting registrars described for the prior specified
modes.</t>
<t>Like other proxies, proxies in name only <bcp14>SHOULD</bcp14> nevertheless track
aliveness of their registrar function and withdraw its service
announcements (both as Join Proxy as well as as registrar) when it does not run,
fails or becomes unresponsive.</t>
<t>Proxies in name only <bcp14>SHOULD</bcp14> default to the same discovery method priority and
weight parameter as those configured for the registrar service announcements.
This is so that in the absence of separate proxies in the network selection
of registrars co-located proxies would follow the same criteria as those
used by proxies and which use the registrar service announcement parameters.</t>
</section>
<section anchor="proxy-mode-discussion"><name>Proxy Mode Discussion</name>
<t>This document defines no requirements against the implementation mode for proxies.
Those are left for solution or deployment (profile) specifications. Instead, this
section discusses some considerations for those choices.</t>
<t>The list of possible modes presented is exemplary and not meant to be exhaustive.
Other modes are equally able to support the requirements, such as mixtures
of the described modes. Likewise, introduction of new variations may not
only work well via arbitrary variation support in proxies, but through
explicit configuration of variations on proxies - this all depends on
the target deployment environment. The presented modes where choosen
primarily as the ones providing most configuration free deployment options and
for registrar implementations most simplicity in implementation.</t>
<t>If a deployment has a larger number of service announcements and (extremely)
constrained pledges, direct connection mode may be inappropriate because it shifts
the burden of best available discovery and selection and onto the pledge. If
simultaneously proxies in such deployments can support more scalable complex implementations,
then best registrar selection mode may be most appropriate.</t>
<t>In environments, where all pledges are expected to become proxies after enrollment,
implementers may simply want to implement the option for which both pledge and
Join Proxy code together is easiest to implement.</t>
<t>Even on registrars, proxy in service name only mode may not suffice deployment requirements
or provide best redundancy. For example, the co-located registrar may incur
problems, not applicable to alternative registrars, such as for example Internet
connectivity problems to MASAs when different registrars have different
Internet connectivity. If the registrar co-located Join Proxy is then
still the only Join Proxy available to some candidate pledges, then this Join Proxy
needs to be able to connect to an alternative registrar, which would
not be possible if it was a proxy in service name only.</t>
<t>Likewise, proxy in service name only mode will disturb the introduction of new variations
on pledges and other registrars in the network if the registrar node implementing
proxy in service name only mode becomes a necessary Join Proxy for a pledge requiring a
variation not supported by this registrar, but by another registrar that
would only be reachable through this registrar node. Therefore, Join Proxy
in name only mode is best suited for node types not deployed on an edge
of the network where a future variety of pledges may connect to, and those
pledges will require the use of a Join Proxy.</t>
</section>
</section>
<section anchor="extensibility-to-non-brski-services"><name>Extensibility to non BRSKI services</name>
<t>Join Proxy implementations using the procedures described in this document can easily
be reused for any other protocols beside BRSKI as long as they use TCP or UDP.
For this, it would simply be required that the Join Proxy can be configured with
pairs of service names other than those used by tBRSKI/cBRSKI: A service name to
discover, and a service name to use for the Join Proxy responder socket service announcements.</t>
</section>
<section anchor="scaling-service-discovery-and-selection"><name>Scaling service discovery and selection</name>
<t>Discovering and selecting an available service instance can become a design challenge
in large networks with many redundant service announcements.</t>
<t>Consider for example the common case of allowing BRSKI registration in a network
with many geographically spread out sites such as in enterprise, industrial or
building construction environments. During initial bringup of such sites,
Internet connectivity may be non-existing, or intermittant, and hence one or more
local registrar in each such site is higly desirable. Such registrars may of course
require private mobile network connectivity to MASA, or rely on out-of-band provisioning
of vouchers.</t>
<t>Later, when such a site does get a well working wide-area network connection,
it may be more appropriate to use more centralized registrars, but a local registrar
as a backup may be considered useful. However, if the service announcements of such
per-site decentralized registrars would be discoverable across the whole geographically
spread out network, then this could introduce a potentially significant
overhead to the service announce and discovery system when for example more
than 100 registrar service announcments exist in the network, and pledges/proxies
connect to them.</t>
<t>Such large number of redundant service announcements is typically highly undesirable,
and appropriate configurations of service discovery mechanisms need to be used
to avoid them. For example, in GRASP, service announcements can be scoped to small hop counts,
Anycast addressing can be used to make all decentralized registrars overload