<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.4.19 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-mmusic-mdns-ice-candidates-03" category="info" updates="8839">

  <front>
    <title abbrev="mdns-ice-candidates">Using Multicast DNS to protect privacy when exposing ICE candidates</title>

    <author initials="Y." surname="Fablet" fullname="Youenn Fablet">
      <organization>Apple Inc.</organization>
      <address>
        <email>youenn@apple.com</email>
      </address>
    </author>
    <author initials="J." surname="Uberti" fullname="Justin Uberti">
      <organization>Clubhouse</organization>
      <address>
        <email>justin@uberti.name</email>
      </address>
    </author>
    <author initials="J." surname="de Borst" fullname="Jeroen de Borst">
      <organization>Google</organization>
      <address>
        <email>jeroendb@google.com</email>
      </address>
    </author>
    <author initials="Q." surname="Wang" fullname="Qingsi Wang">
      <organization>Google</organization>
      <address>
        <email>qingsi@google.com</email>
      </address>
    </author>

    <date year="2021" month="December" day="05"/>

    <area>General</area>
    <workgroup>MMUSIC</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>WebRTC applications collect ICE candidates as part of the process of creating
peer-to-peer connections. To maximize the probability of a direct peer-to-peer
connection, the endpoint’s local IP addresses are included in this candidate
collection. However, these addresses are typically private and, as such, their
disclosure has privacy implications. This document describes a 
privacy-preserving way to share local IP addresses with other endpoints by
concealing the addresses with dynamically generated Multicast DNS (mDNS) names.</t>



    </abstract>


  </front>

  <middle>


<section anchor="problems" title="Introduction">

<t>As detailed in <xref target="IPHandling"/>, exposing client local IP addresses by default
to web applications maximizes the probability of successfully creating direct
peer-to-peer connections between clients, but creates a significant surface for
user fingerprinting. <xref target="IPHandling"/> recognizes this issue, but also admits that
there is no current solution to this problem; implementations that choose to use
Mode 3 to address the privacy concerns often suffer from failing or suboptimal
connections in WebRTC applications. This is particularly an issue on unmanaged
networks, typically homes or small offices, where NAT loopback may not be
supported.</t>

<t>This document proposes an overall solution to this problem by extending
<xref target="ICESDP"/> to allow ICE implementations to register ephemeral mDNS <xref target="RFC6762"/>
names for local IP addresses, and then provide those names, rather than
the IP addresses, in their ICE candidates. While this technique is intended
to benefit WebRTC implementations in web browsers, by preventing collection
of private IP addresses by arbitrary web pages, it can also be used by any
endpoint that wants to avoid disclosing information about its local network
to remote peers on other networks.</t>

<t>WebRTC and WebRTC-compatible endpoints <xref target="Overview"/> that receive ICE
candidates with mDNS names will resolve these names to IP addresses and
perform ICE processing as usual. In the case where the
endpoint is a web application, the WebRTC implementation will manage this
resolution internally and will not disclose the actual IP addresses to the
application.</t>

<t>While mDNS names are usually only valid within a local network, the same is true for 
private IP addresses, and therefore this does not limit the effectiveness of 
this technique.</t>

</section>
<section anchor="terminology" title="Terminology">

<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”,
“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this
document are to be interpreted as described in <xref target="RFC2119"/>.</t>

</section>
<section anchor="description" title="Description">

<t>This section uses the concept of ICE agent as defined in <xref target="RFC8445"/>. In the
remainder of the document, it is assumed that each browsing context (as defined
in Section 7.1 of <xref target="HTMLSpec"/>) has its own ICE agent.</t>

<section anchor="gathering" title="ICE Candidate Gathering">

<t>This section outlines how mDNS should be used by ICE agents to conceal local
IP addresses.</t>

<section anchor="procedure" title="Procedure">

<t>For each host candidate gathered by an ICE agent as part of the gathering
process described in <xref target="RFC8445"/>, Section 5.1.1, the candidate is handled as
described below.</t>

<t><list style="numbers">
  <t>Check whether this IP address satisfies the ICE agent’s policy regarding
whether an address is safe to expose (typically, following the advice
from <xref target="address-privacy"/> below). If so, expose the candidate and abort
this process.</t>
  <t>Check whether the ICE agent has previously generated, registered, and stored
an mDNS hostname for this IP address as per steps 3 to 5. If it has, skip
ahead to step 6.</t>
  <t>Generate a unique mDNS hostname. The unique name MUST consist of a version 4
UUID as defined in <xref target="RFC4122"/>, followed by “.local”.</t>
  <t>Register the candidate’s mDNS hostname as defined in <xref target="RFC6762"/>. The ICE agent
SHOULD send an mDNS announcement for the hostname, but as the hostname is expected
to be unique, the ICE agent SHOULD skip probing of the hostname.</t>
  <t>Store the mDNS hostname and its related IP address in the ICE agent for
future reuse.</t>
  <t>Replace the IP address of the ICE candidate with its mDNS hostname and
provide the candidate to the web application.</t>
</list></t>

<t>ICE agents can implement this procedure in any way as long as it produces
equivalent results. An implementation may for instance pre-register mDNS
hostnames by executing steps 3 to 5 and prepopulate an ICE agent accordingly.
By doing so, only step 6 of the above procedure will be executed at the time
of gathering candidates.</t>

<t>In order to prevent web applications from using this mechanism to query for
mDNS support in the local network, the ICE agent SHOULD still provide mDNS
candidates in step 6 even if the local network does not support mDNS or mDNS
registration fails in step 4.</t>

<t>This procedure ensures that an mDNS name is used to replace only one IP address.
Specifically, an ICE agent using an interface with both IPv4 and IPv6 addresses
MUST expose a different mDNS name for each address.</t>

</section>
<section anchor="implementation-guidance" title="Implementation Guidance">

<section anchor="registration" title="Registration">

<t>Sending the mDNS announcement to the network can be delayed, for instance due
to rate limits. An ICE agent SHOULD provide the candidate to the web application
as soon as its mDNS name is generated, regardless of whether the announcement
has been sent on the network.</t>

</section>
<section anchor="address-privacy" title="Determining Address Privacy and Server-Reflexive Candidates">

<t>Naturally, an address that is already exposed to the Internet does not need to
be protected by mDNS, as it can be trivially observed by the web server or
remote endpoint. However, determining this ahead of time is not straightforward;
while the fact that an IPv4 address is private can sometimes be inferred by its
value, e.g., whether it is an <xref target="RFC1918"/> address, the reverse is not
necessarily true. IPv6 addresses present their own complications, e.g.,
private IPv6 addresses as a result of NAT64 <xref target="RFC6146"/>.</t>

<t>Instead, the determination of whether an address is public can be reliably made
as part of the ICE gathering process. For each mDNS host candidate generated
according the guidance above, the usual STUN <xref target="RFC5389"/> request is sent to
a STUN server. This can be done for both IPv4 and IPv6 local addresses,
provided that the application has configured both IPv4 and IPv6 STUN servers.
If the STUN response returns the same value as the local IP address,
this indicates the address is in fact public, although processing will
continue as described below.</t>

<t>Regardless of whether the address turns out to be public or private, a
server-reflexive candidate will be generated; the transport address of this
candidate will be an IP address and therefore
distinct from the hostname transport address of the associated mDNS candidate,
and as such MUST NOT be considered redundant per the guidance in <xref target="RFC8445"/>,
Section 5.1.3. To avoid accidental IP address disclosure, this server-reflexive
candidate MUST have its raddr field set to “0.0.0.0”/”::” and its rport field
set to “9”, as discussed in <xref target="ICESDP"/>, Section 9.1.</t>

<t>Because a new candidate is always generated by the STUN query, the ICE agent
SHOULD initially provide mDNS-wrapped candidates to the application and then
follow with server-reflexive candidates once they are obtained, unless it has
a priori knowledge that a given address is public and does not require mDNS
wrapping.</t>

<t>To that end, once an address has been identified as public, the ICE agent MAY
cache this information and skip mDNS protection for that address in future ICE
gathering phases. Note that if the set of STUN servers changes, any cached
information SHOULD be discarded, as the new set may return different results.</t>

</section>
<section anchor="special-handling-for-ipv6-addresses" title="Special Handling for IPv6 Addresses">

<t>As noted in <xref target="IPHandling"/>, private IPv4 addresses are especially problematic
because of their unbounded lifetime. However, the <xref target="RFC4941"/> IPv6
addresses recommended for WebRTC have inherent privacy protections, namely
a short lifetime and the lack of any stateful information. Accordingly,
implementations MAY choose to not conceal <xref target="RFC4941"/> addresses with mDNS names
as a tradeoff for improved peer-to-peer connectivity.</t>

</section>
<section anchor="mdns-candidate-encoding" title="mDNS Candidate Encoding">

<t>The mDNS name of an mDNS candidate MUST be used in the connection-address field
of its candidate attribute. However, when an mDNS candidate would be the
default candidate, typically because there are no other candidates, its mDNS
name MUST NOT be used in the connection-address field of the SDP “c=” line, as
experimental deployment has indicated that many remote endpoints will fail to
handle such a SDP. In this situation, the IP address values “0.0.0.0”/”::” and
port value “9” MUST instead be used in the c= and m= lines, similar to how the
no-candidates case is handled in <xref target="ICESDP"/>, Section 4.3.1.</t>

<t>Any candidates exposed to the application via local descriptions MUST be
identical to those provided during candidate gathering (i.e., MUST NOT
contain private host IP addresses).</t>

</section>
</section>
</section>
<section anchor="processing" title="ICE Candidate Processing">

<t>This section outlines how received ICE candidates with mDNS names are
processed by ICE agents, and is relevant to all endpoints.</t>

<section anchor="procedure-1" title="Procedure">

<t>For any remote ICE candidate received by the ICE agent, the following procedure
is used:</t>

<t><list style="numbers">
  <t>If the connection-address field value of the ICE candidate does not end with
“.local” or if the value contains more than one “.”, then process the candidate
as defined in <xref target="RFC8445"/>.</t>
  <t>If the ICE candidate policy is “relay”, as defined in <xref target="JSEP"/>, ignore the candidate.</t>
  <t>Otherwise, resolve the candidate using mDNS. The ICE agent SHOULD set the
unicast-response bit of the corresponding mDNS query message; this minimizes
multicast traffic, as the response is probably only useful to the
querying node.</t>
  <t>If it resolves to an IP address, replace the mDNS hostname of the ICE
candidate with the resolved IP address and continue processing of the candidate
as defined in <xref target="RFC8445"/>.</t>
  <t>Otherwise, ignore the candidate.</t>
</list></t>

</section>
<section anchor="implementation-guidance-1" title="Implementation Guidance">

<t>An ICE agent may use a hostname resolver that transparently supports both
Multicast and Unicast DNS. In this case the resolution of a “.local” name may
happen through Unicast DNS as noted in <xref target="RFC6762"/>, Section 3.</t>

<t>An ICE agent SHOULD ignore candidates where the hostname resolution returns
more than one IP address.</t>

<t>An ICE agent MAY add additional restrictions regarding the ICE candidates it
will resolve using mDNS, as this mechanism allows attackers to send ICE traffic
to devices with well-known mDNS names. In particular, ICE agents SHOULD NOT
resolve mDNS names if they are not in the format defined by <xref target="gathering"/>.</t>

</section>
</section>
<section anchor="privacy" title="Additional Privacy Considerations">

<t>The goal of this mechanism is to keep knowledge of private host IP
addresses within the ICE agent while continuing to allow the
application to transmit ICE candidates. Besides keeping private
host IP addresses out of ICE candidates, implementations must take
steps to prevent these IP addresses from being exposed to web
applications through other means.</t>

<section anchor="statistics" title="Statistics">

<t>Statistics related to ICE candidates that are accessible to the web
application MUST NOT contain the IP address of a local or remote mDNS
candidate; the mDNS name SHOULD be used instead.</t>

<t>Statistics SHOULD NOT leak whether the mDNS resolution succeeds or fails.
For that reason, RTCIceCandidateStats objects as defined in <xref target="WebRTCStats"/>
SHOULD be generated for any remote mDNS candidate submitted to the ICE agent,
even if the mDNS candidate is ignored as part of <xref target="processing"/>.
An implementation strategy to obfuscate the address of an mDNS candidate in the statistics, regardless if it is resolved or not, is to replace
the mDNS hostname of the ICE candidate with IP values “0.0.0.0” or “::”.</t>

<t>In addition, a peer-reflexive remote candidate may be constructed
from a remote host IP address as a result of an ICE connectivity
check, as described in Section 7.3.1.3 of <xref target="RFC8445"/>. This check
may arrive before the candidate due to signaling or mDNS
resolution delays, as shown in the examples above.</t>

<t>To prevent disclosure of the host IP address to the application in
this scenario, statistics related to ICE candidates MUST NOT
contain the IP address of any peer-reflexive candidate, unless that IP
has already been learned through signaling of a candidate with the
same address and either the same or a different port; this includes cases
where the signaled candidate is discarded as redundant according to
Section 5.1.3 of <xref target="RFC8445"/>.</t>

</section>
<section anchor="interactions-with-turn-servers" title="Interactions With TURN Servers">

<t>When sending data to a TURN <xref target="RFC5766"/> server, the sending client tells
the server the destination IP and port for the data. This means that
if the client uses TURN to send to an IP that was obtained by mDNS
resolution, the TURN server will learn the underlying host IP and port,
and this information can then be relayed to the web application,
defeating the value of the mDNS wrapping.</t>

<t>To prevent disclosure of the host IP address to a TURN server, the ICE
agent MUST NOT form candidate pairs between its own relay candidates
and remote mDNS candidates. This restriction applies to all remote mDNS
candidate types, not just host candidates; mDNS candidates can be
clearly identified from their connection-address fields.
Note also that the converse is not an issue;
the ICE agent MAY form candidate pairs between its own mDNS candidates and
remote relay candidates, as in this situation host IPs will not be sent
directly to the TURN server.</t>

<t>This restriction has no effect on connectivity; in the cases where
host IP addresses are private and need to be wrapped with mDNS names,
they will be unreachable from the TURN server, and as noted above,
the reverse path will continue to work normally.</t>

</section>
<section anchor="generated-name-reuse" title="Generated Name Reuse">

<t>It is important that use of registered mDNS hostnames is limited in time
and/or scope. Indefinitely reusing the same mDNS hostname candidate would
provide applications an even more reliable tracking mechanism than the private
IP addresses that this specification is designed to hide. In the case of a web
application, the use of registered mDNS hostnames SHOULD be scoped by the web
application origin, and SHOULD have the lifetime of the page executing the web
application.</t>

</section>
<section anchor="specific-browsing-contexts" title="Specific Browsing Contexts">

<t>As noted in <xref target="IPHandling"/>, privacy may be breached if a web application running
in two browsing contexts can determine whether it is running on the same device.
While the approach in this document prevents the application from directly
comparing local private IP addresses, a successful local WebRTC connection
can also present a threat to user privacy. Specifically, when the latency of a
WebRTC connection latency is close to zero, the probability is high that the
two peers are running on the same device.</t>

<t>To avoid this issue, browsers SHOULD NOT register mDNS names for WebRTC
applications running in a third-party browsing context (i.e., a context that
has a different origin than the top-level browsing context), or a private
browsing context.</t>

</section>
<section anchor="network-interface-enumeration" title="Network Interface Enumeration">

<t>Even when local IP addresses are not exposed, the number of mDNS hostname
candidates can still provide a fingerprinting dimension. This is in particular
the case for network interfaces with limited connectivity that will not generate
server-reflexive or relay candidates.</t>

<t>The more mDNS names an endpoint exposes through mDNS hostname candidates, the
higher the fingerprinting risk. One countermeasure is to limit this number to a
small value.</t>

<t>Note that no additional fingerprinting risk is introduced when restricting mDNS
hostname candidates to default route only.</t>

</section>
<section anchor="monitoring-of-sessions" title="Monitoring of Sessions">

<t>A malicious endpoint in the local network may also record other endpoints who
are registering, unregistering, and resolving mDNS names. By doing so, they can
create a session log that shows which endpoints are communicating, and for how
long. If both endpoints in the session are on the same network, the fact they
are communicating can be discovered.</t>

<t>Mitigation of this threat is beyond the scope of this proposal.</t>

</section>
</section>
</section>
<section anchor="update-to-rfc-8839" title="Update to RFC 8839">

<t>Section 5.1 of <xref target="ICESDP"/> states:</t>

<t><list style='empty'>
  <t>An agent generating local candidates MUST NOT use FQDN addresses.
An agent processing remote candidates MUST ignore candidate lines that 
include candidates with FQDN or IP address versions that are not supported
or recognized.</t>
</list></t>

<t>This document extends <xref target="ICESDP"/> to specifically allow the generation and
processing of ICE candidates with the “.local” FQDNs defined in {gathering}.
The restrictions on other FQDNs are unaffected.</t>

</section>
<section anchor="potential-limitations" title="Potential Limitations">

<section anchor="reduced-connectivity" title="Reduced Connectivity">

<t>With typical ICE, endpoints on the same network will usually be able to
establish a direct connection between their local IP addresses. When using the
mDNS technique, a direct connection is still possible, but only if at least one
side can properly resolve the provided mDNS candidates. This may not be possible
in all scenarios.</t>

<t>First, some networks may entirely disable mDNS.  Second, mDNS queries have
limited scope. On large networks, this may mean that an mDNS name cannot be
resolved if the remote endpoint is too many segments away.</t>

<t>When mDNS fails, ICE will attempt to fall back to either NAT hairpin, if
supported, or TURN relay if not. This may result in reduced connectivity,
reduced throughput and increased latency, as well as increased cost in case of
TURN relay.</t>

<t>During experimental testing of the mDNS technique across a set of known
mDNS-aware endpoints that had configured a STUN server but not a TURN server,
the observed impact to ICE connection rate was 2% (relative) when mDNS
was enabled on both sides, compared to when mDNS was only enabled on one
side. In this testing, the percentage of connections that required STUN
(i.e., went through a NAT) increased from 94% to 97%, indicating that
mDNS succeeded about half the time, and fell back to NAT hairpin for the
remainder. The most likely explanation for the overall connection rate drop
is that hairpinning failed in some cases.</t>

</section>
<section anchor="connection-setup-latency" title="Connection Setup Latency">

<t>As noted in <xref target="description"/>, ICE agents using the mDNS technique are responsible
for registering and resolving mDNS names as part of the ICE process. These
steps may delay establishment of a direct peer-to-peer connection, compared to
when raw local IP addresses are used.</t>

<t>Given that these mDNS registrations and queries are typically occurring on a
local network, any associated delays should be small. Also, as noted in
<xref target="gathering"/>, pre-registration can be employed to eliminate gathering delays
entirely.</t>

</section>
<section anchor="backward-compatibility" title="Backward Compatibility">

<t>For the most part, backward compatibility does not present a significant issue
for the mDNS technique. When an endpoint that supports mDNS communicates with
a legacy endpoint that does not, the legacy endpoint will still provide its local
IP addresses, allowing the new endpoint to attempt direct connections to
those addresses. Through the process of learning peer-reflexive candidates 
described in <xref target="RFC8445"/>, the legacy endpoint will also learn the IP addresses 
of the mDNS-aware endpoint, allowing ICE to succeed even though the legacy
endpoint cannot resolve the mDNS names. In the event the legacy endpoint attempts
to resolve the mDNS names using Unicast DNS, this may cause ICE to take somewhat
longer to fully complete, but should not have any effect on connectivity or
connection setup time.</t>

<t>However, some legacy endpoints are not fully spec-compliant and can
behave unpredictably in the presence of ICE candidates that contain a hostname,
potentially leading to ICE failure. Specifically, the SDP parsers in these 
endpoints may raise a fatal error when receiving such candidates, rather than
simply ignoring them.</t>

<t>Some endpoints may also fail to handle a connectivity check from an address that
they have not received in signaling (i.e., they do not support learning
peer-reflexive candidates as described above), leading to ICE failure.
During the aforementioned experimental testing, the connection rate when
interacting with endpoints that provided raw IP addresses (and therefore 
should be unaffected) decreased by 3% (relative), presumably for these reasons.</t>

</section>
</section>
<section anchor="examples" title="Examples">

<t>The examples below show how the mDNS technique is used during ICE processing.
The first example shows a simple case, the next two examples demonstrate how
peer-reflexive candidates for local IP addresses can be created due to timing
differences, and the final example shows a real-world case with IPv4, IPv6, and
STUN.</t>

<section anchor="normal-handling" title="Normal Handling">

<t>In this example, mDNS candidates are exchanged between peers and resolved
normally to obtain the corresponding IP addresses.</t>

<figure><artwork><![CDATA[
           ICE Agent 1 (192.0.2.1)           ICE Agent 2 (192.0.2.2)
       <Register mDNS |                                 |
         name N1,     |                                 |
         192.0.2.1>   |                                 |
                      |------- mDNS Candidate N1 ------>|
                      |                                 | <Register mDNS
                      |                                 |  name N2,
                      |                                 |  192.0.2.2>
                      |<------ mDNS Candidate N2 -------|
       <Resolve       |                                 | <Resolve
        mDNS name N2> |                                 |  mDNS name N1>
                      |<=== STUN check to 192.0.2.1 ====|
                      |==== STUN check to 192.0.2.2 ===>|
                      |                                 |
]]></artwork></figure>

<t>The exchange of ICE candidates relies on out-of-band signaling, for example,
the SDP Offer/Answer procedure defined in <xref target="ICESDP"/>. In the above example,
the candidate attributes in the SDP messages to exchange the mDNS candidates
between ICE Agent 1 and 2 are as follows:</t>

<t>ICE Agent 1:</t>

<figure><artwork><![CDATA[
a=candidate:1 1 udp 2122262783 1f4712db-ea17-4bcf-a596-105139dfd8bf.local
  54596 typ host
]]></artwork></figure>

<t>ICE Agent 2:</t>

<figure><artwork><![CDATA[
a=candidate:1 1 udp 2122262783 2579ef4b-50ae-4bfe-95af-70b3376ecb9c.local
  61606 typ host
]]></artwork></figure>

</section>
<section anchor="peer-reflexive-candidate-from-slow-signaling" title="Peer-reflexive Candidate From Slow Signaling">

<t>In this example, a peer-reflexive candidate is generated because the
mDNS candidate is signaled after the STUN checks begin.</t>

<figure><artwork><![CDATA[
           ICE Agent 1 (192.0.2.1)           ICE Agent 2 (192.0.2.2)
       <Register mDNS |                                 |
         name N1,     |                                 |
         192.0.2.1>   |                                 |
                      |------- mDNS Candidate N1 ------>|
                      |                                 | <Resolve
                      |                                 |  mDNS name N1>
                      |<=== STUN check to 192.0.2.1 ====|
      prflx candidate |                                 | <Register mDNS
    192.0.2.2 created |                                 |  name N2,
                      |                                 |  192.0.2.2>
                      |<------ mDNS Candidate N2 -------|
                      |                                 |
]]></artwork></figure>

</section>
<section anchor="peer-reflexive-candidate-from-slow-resolution" title="Peer-reflexive Candidate From Slow Resolution">

<t>In this example, a peer-reflexive candidate is generated because the
mDNS resolution for name N2 does not complete until after the STUN checks are
received.</t>

<figure><artwork><![CDATA[
           ICE Agent 1 (192.0.2.1)           ICE Agent 2 (192.0.2.2)
       <Register mDNS |                                 | <Register mDNS
         name N1,     |                                 |  name N2,
         192.0.2.1>   |                                 |  192.0.2.2>
                      |------- mDNS Candidate N1 ------>|
                      |<------ mDNS Candidate N2 -------|
<Resolve              |                                 | <Resolve
 mDNS                 |                                 |  mDNS name N1>
  .                   |<=== STUN check to 192.0.2.1 ====|
  .   prflx candidate |                                 |
  . 192.0.2.2 created |                                 |
 name                 |                                 |
 N2>                  |                                 |
]]></artwork></figure>

</section>
<section anchor="ipv4-ipv6-and-stun-handling" title="IPv4, IPv6, and STUN handling">

<t>This last example demonstrates the overall ICE gathering process for two
endpoints, each with a private IPv4 address and a public IPv6 address. They
preregister their mDNS names to speed up ICE gathering.</t>

<figure><artwork><![CDATA[
               ICE Agent 1                        ICE Agent 2
               192.168.1.1         STUN           192.168.1.2
               2001:db8::1        Server          2001:db8::2
  ----------------------------------------------------------------------
                      Pre-registration of mDNS names
                   |                |                 |
    <Register mDNS |                |                 | <Register mDNS
      name N1.1,   |                |                 |  name N2.1,
      192.168.1.1> |                |                 |  192.168.1.2>
    <Register mDNS |                |                 | <Register mDNS
      name N1.2,   |                |                 |  name N2.2,
      2001:db8::1> |                |                 |  2001:db8::2>
                   |                |                 |
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                    ICE Agent 1 sends mDNS candidates
                   |                |                 |
            <N1.1> |------- mDNS Candidate C1.1 ----->|
            <N1.2> |------- mDNS Candidate C1.2 ----->|
                   |                |                 | <Resolve mDNS
                   |                |                 |  name N1.1 to
                   |                |                 |  192.168.1.1>
                   |                |                 | <Resolve mDNS
                   |                |                 |  name N1.2 to
                   |                |                 |  2001:db8::1>
                   |                |                 |
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              ICE Agent 1 sends server-reflexive candidates
                   |                |                 |
    <192.168.1.1   |--Binding Req-->|                 |
     is 192.0.2.1> |<-Binding Resp--|                 |
       <192.0.2.1> |------ srflx Candidate C1.3 ----->|
  <2001:db8::1     |--Binding Req-->|                 |
   is 2001:db8::1> |<-Binding Resp--|                 |
     <2001:db8::1> |------ srflx Candidate C1.4 ----->| <Discard C1.4
                   |                |                 |  as redundant>
                   |                |                 |
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          ICE Agent 2 sends mDNS candidates, resolution is slow
                   |                |                 |
                   |<------ mDNS Candidate C2.1 ------| <N2.1>
                   |<------ mDNS Candidate C2.2 ------| <N2.2>
   <Resolve mDNS   |                |                 |
    name N2.1 ...> |                |                 |
   <Resolve mDNS   |                |                 |
    name N2.2 ...> |                |                 |
                   |                |                 |
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ICE Agent 2 sends server-reflexive candidates, resolution completes
                   |                |                 |
                   |                |<--Binding Req---| <192.168.1.2
                   |                |---Binding Resp->|  is 192.0.2.2>
                   |<----- srflx Candidate C2.3 ------| <192.0.2.2>
                   |                |<--Binding Req---| <2001:db8::2
                   |                |---Binding Resp->|  is 2001:db8::2>
                   |<----- srflx Candidate C2.4 ------| <2001:db8::2>
                   |                |                 |
    <... N2.1 is   |                |                 |
     192.168.1.2>  |                |                 |
    <... N2.2 is   |                |                 |
     2001:db8::2,  |                |                 |
     discard C2.4> |                |                 |
                   |                |                 |
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                          ICE connectivity checks
                   |                |                 |
       2001:db8::1 |<============= STUN ==============| 2001:db8::2
       2001:db8::1 |============== STUN =============>| 2001:db8::2
       192.168.1.1 |<============= STUN ==============| 192.168.1.2
       192.168.1.1 |============== STUN =============>| 192.168.1.2
         192.0.2.1 |    Failed <-- STUN --------------| 192.168.1.2
       192.168.1.1 |---------------STUN --> Failed    | 192.0.2.2
       2001:db8::1 |====== STUN(USE-CANDIDATE) ======>| 2001:db8::2
]]></artwork></figure>

<t>Ice Agent 1 candidates:</t>

<figure><artwork><![CDATA[
  C1.1: candidate:1 1 udp 2122262783 9b36eaac-bb2e-49bb-bb78-
                  21c41c499900.local 10004 typ host
  C1.2: candidate:2 1 udp 2122262527 76c82649-02d6-4030-8aef-
                  a2ba3a9019d5.local 10006 typ host
  C1.3: candidate:1 1 udp 1686055167 192.0.2.1
                  30004 typ srflx raddr 0.0.0.0 rport 0
  C1.4: candidate:2 1 udp 1686054911 2001:db8::1
                  10006 typ srflx raddr 0.0.0.0 rport 0
]]></artwork></figure>

<t>Ice Agent 2 candidates:</t>

<figure><artwork><![CDATA[
  C2.1: candidate:1 1 udp 2122262783 b977f597-260c-4f70-9ac4-
                  26e69b55f966.local 20004 typ host
  C2.2: candidate:2 1 udp 2122262527 ac4595a7-7e42-4e85-85e6-
                  c292abe0e681.local 20006 typ host
  C2.3: candidate:1 1 udp 1686055167 192.0.2.2
                  40004 typ srflx raddr 0.0.0.0 rport 0
  C2.4: candidate:2 1 udp 1686054911 2001:db8::2
                  20006 typ srflx raddr 0.0.0.0 rport 0
]]></artwork></figure>

</section>
</section>
<section anchor="security" title="Security Considerations">

<section anchor="mdns-message-flooding" title="mDNS Message Flooding">

<t>The implementation of this proposal requires the mDNS querying capability of the
browser for registering mDNS names or adding remote ICE host candidates with
such names. It also requires the mDNS responding capability of either the
browser or the operating platform of the browser for registering, removing or
resolving mDNS names. In particular,</t>

<t><list style="symbols">
  <t>the registration of name requires optional probing queries and mandatory
announcing responses (<xref target="RFC6762"/>, Section 8), and this is performed at the
beginning of ICE gathering;</t>
  <t>the addition of remote ICE host candidates with mDNS names generates mDNS
queries for names of each candidate;</t>
  <t>the removal of names could happen when the browsing context of the ICE agent
is destroyed in an implementation, and goodbye responses should be sent to
invalidate records generated by the ICE agent in the local network
(<xref target="RFC6762"/>, Section 10.1).</t>
</list></t>

<t>A malicious Web application could flood the local network with mDNS messages by:</t>

<t><list style="symbols">
  <t>creating browsing contexts that create ICE agents and start gathering of
local ICE host candidates;</t>
  <t>destroying these local candidates soon after the name registration is done;</t>
  <t>adding fictitious remote ICE host candidates with mDNS names.</t>
</list></t>

<t><xref target="RFC6762"/> defines a general per-question and per-record multicast rate
limiting rule, in which a given question or record on a given interface cannot be
sent less than one second since its last transmission. This rate limiting rule
however does not mitigate the above attacks, in which new names, hence new
questions or records, are constantly created and sent. Therefore, a browser-wide
mDNS message rate limit MUST be provided for all mDNS queries and responses that
are dispatched during the ICE candidate gathering and processing described in
<xref target="description"/>. A browser MAY implement more specific rate limits, e.g., to
ensure a single origin does not prevent other origins from registering,
unregistering, or resolving mDNS names.</t>

</section>
<section anchor="malicious-responses-to-deny-name-registration" title="Malicious Responses to Deny Name Registration">

<t>If the optional probing queries are implemented for the name registration, a
malicious endpoint in the local network, which is capable of responding mDNS
queries, could send responses to block the use of the generated names. This
would lead to the discarding of this ICE host candidate as in Step 5 in
<xref target="gathering"/>.</t>

<t>The above attack can be mitigated by skipping the probing when registering a
name, which also conforms to Section 8 in <xref target="RFC6762"/>, given that the name is
randomly generated for the probabilistic uniqueness (e.g. a version 4 UUID) in
Step 3 in <xref target="gathering"/>. However, a similar attack can be performed by
exploiting the negative responses (defined in <xref target="RFC6762"/>, Section 8.1), in
which NSEC resource records are sent to claim the nonexistence of records
related to the gathered ICE host candidates.</t>

<t>The existence of malicious endpoints in the local network poses a generic
threat, and requires dedicated protocol suites to mitigate, which is beyond the
scope of this proposal.</t>

</section>
<section anchor="unsolicited-ice-communications" title="Unsolicited ICE Communications">

<t>As noted in Section 4.2 of <xref target="RTCWebSecurity"/>, an attacker may use ICE as a way
to send unsolicited network traffic to specific endpoints. While this is not
specific to mDNS hostname candidates, this technique makes it easier to
target devices with well-known mDNS names.</t>

<t>Also, the same technique can be used as an oracle to determine whether some
local services are reachable in the local network. This knowledge can be used
for fingerprinting purposes or as a basis for attacking local networks.</t>

<t>As noted in <xref target="processing"/>, ICE agents are discouraged to resolve mDNS names
that are not in the format defined by <xref target="gathering"/> and may further constrain
the mDNS names they will actually try to resolve.</t>

</section>
</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>This document requires no actions from IANA.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author fullname='S. Bradner' initials='S.' surname='Bradner'><organization/></author>
<date month='March' year='1997'/>
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference anchor='RFC4122' target='https://www.rfc-editor.org/info/rfc4122'>
<front>
<title>A Universally Unique IDentifier (UUID) URN Namespace</title>
<author fullname='P. Leach' initials='P.' surname='Leach'><organization/></author>
<author fullname='M. Mealling' initials='M.' surname='Mealling'><organization/></author>
<author fullname='R. Salz' initials='R.' surname='Salz'><organization/></author>
<date month='July' year='2005'/>
<abstract><t>This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier).  A UUID is 128 bits long, and can guarantee uniqueness across space and time.  UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation\'s (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t><t>This specification is derived from the DCE specification with the kind permission of the OSF (now known as The Open Group).  Information from earlier versions of the DCE specification have been incorporated into this document.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4122'/>
<seriesInfo name='DOI' value='10.17487/RFC4122'/>
</reference>



<reference anchor='RFC4941' target='https://www.rfc-editor.org/info/rfc4941'>
<front>
<title>Privacy Extensions for Stateless Address Autoconfiguration in IPv6</title>
<author fullname='T. Narten' initials='T.' surname='Narten'><organization/></author>
<author fullname='R. Draves' initials='R.' surname='Draves'><organization/></author>
<author fullname='S. Krishnan' initials='S.' surname='Krishnan'><organization/></author>
<date month='September' year='2007'/>
<abstract><t>Nodes use IPv6 stateless address autoconfiguration to generate addresses using a combination of locally available information and information advertised by routers.  Addresses are formed by combining network prefixes with an interface identifier.  On an interface that contains an embedded IEEE Identifier, the interface identifier is typically derived from it.  On other interface types, the interface identifier is generated through other means, for example, via random number generation.  This document describes an extension to IPv6 stateless address autoconfiguration for interfaces whose interface identifier is derived from an IEEE identifier.  Use of the extension causes nodes to generate global scope addresses from interface identifiers that change over time, even in cases where the interface contains an embedded IEEE identifier.  Changing the interface identifier (and the global scope addresses generated from it) over time makes it more difficult for eavesdroppers and other information collectors to identify when different addresses used in different transactions actually correspond to the same node.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4941'/>
<seriesInfo name='DOI' value='10.17487/RFC4941'/>
</reference>



<reference anchor='RFC5389' target='https://www.rfc-editor.org/info/rfc5389'>
<front>
<title>Session Traversal Utilities for NAT (STUN)</title>
<author fullname='J. Rosenberg' initials='J.' surname='Rosenberg'><organization/></author>
<author fullname='R. Mahy' initials='R.' surname='Mahy'><organization/></author>
<author fullname='P. Matthews' initials='P.' surname='Matthews'><organization/></author>
<author fullname='D. Wing' initials='D.' surname='Wing'><organization/></author>
<date month='October' year='2008'/>
<abstract><t>Session Traversal Utilities for NAT (STUN) is a protocol that serves as a tool for other protocols in dealing with Network Address Translator (NAT) traversal.  It can be used by an endpoint to determine the IP address and port allocated to it by a NAT.  It can also be used to check connectivity between two endpoints, and as a keep-alive protocol to maintain NAT bindings.  STUN works with many existing NATs, and does not require any special behavior from them.</t><t>STUN is not a NAT traversal solution by itself.  Rather, it is a tool to be used in the context of a NAT traversal solution.  This is an important change from the previous version of this specification (RFC 3489), which presented STUN as a complete solution.</t><t>This document obsoletes RFC 3489.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5389'/>
<seriesInfo name='DOI' value='10.17487/RFC5389'/>
</reference>



<reference anchor='RFC5766' target='https://www.rfc-editor.org/info/rfc5766'>
<front>
<title>Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)</title>
<author fullname='R. Mahy' initials='R.' surname='Mahy'><organization/></author>
<author fullname='P. Matthews' initials='P.' surname='Matthews'><organization/></author>
<author fullname='J. Rosenberg' initials='J.' surname='Rosenberg'><organization/></author>
<date month='April' year='2010'/>
<abstract><t>If a host is located behind a NAT, then in certain situations it can be impossible for that host to communicate directly with other hosts (peers).  In these situations, it is necessary for the host to use the services of an intermediate node that acts as a communication relay.  This specification defines a protocol, called TURN (Traversal Using Relays around NAT), that allows the host to control the operation of the relay and to exchange packets with its peers using the relay.  TURN differs from some other relay control protocols in that it allows a client to communicate with multiple peers using a single relay address.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5766'/>
<seriesInfo name='DOI' value='10.17487/RFC5766'/>
</reference>



<reference anchor='RFC6762' target='https://www.rfc-editor.org/info/rfc6762'>
<front>
<title>Multicast DNS</title>
<author fullname='S. Cheshire' initials='S.' surname='Cheshire'><organization/></author>
<author fullname='M. Krochmal' initials='M.' surname='Krochmal'><organization/></author>
<date month='February' year='2013'/>
<abstract><t>As networked devices become smaller, more portable, and more ubiquitous, the ability to operate with less configured infrastructure is increasingly important.  In particular, the ability to look up DNS resource record data types (including, but not limited to, host names) in the absence of a conventional managed DNS server is useful.</t><t>Multicast DNS (mDNS) provides the ability to perform DNS-like operations on the local link in the absence of any conventional Unicast DNS server.  In addition, Multicast DNS designates a portion of the DNS namespace to be free for local use, without the need to pay any annual fee, and without the need to set up delegations or otherwise configure a conventional DNS server to answer for those names.</t><t>The primary benefits of Multicast DNS names are that (i) they require little or no administration or configuration to set them up, (ii) they work when no infrastructure is present, and (iii) they work during infrastructure failures.</t></abstract>
</front>
<seriesInfo name='RFC' value='6762'/>
<seriesInfo name='DOI' value='10.17487/RFC6762'/>
</reference>



<reference anchor='RFC8445' target='https://www.rfc-editor.org/info/rfc8445'>
<front>
<title>Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal</title>
<author fullname='A. Keranen' initials='A.' surname='Keranen'><organization/></author>
<author fullname='C. Holmberg' initials='C.' surname='Holmberg'><organization/></author>
<author fullname='J. Rosenberg' initials='J.' surname='Rosenberg'><organization/></author>
<date month='July' year='2018'/>
<abstract><t>This document describes a protocol for Network Address Translator (NAT) traversal for UDP-based communication.  This protocol is called Interactive Connectivity Establishment (ICE).  ICE makes use of the Session Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using Relay NAT (TURN).</t><t>This document obsoletes RFC 5245.</t></abstract>
</front>
<seriesInfo name='RFC' value='8445'/>
<seriesInfo name='DOI' value='10.17487/RFC8445'/>
</reference>




    </references>

    <references title='Informative References'>





<reference anchor='RFC1918' target='https://www.rfc-editor.org/info/rfc1918'>
<front>
<title>Address Allocation for Private Internets</title>
<author fullname='Y. Rekhter' initials='Y.' surname='Rekhter'><organization/></author>
<author fullname='B. Moskowitz' initials='B.' surname='Moskowitz'><organization/></author>
<author fullname='D. Karrenberg' initials='D.' surname='Karrenberg'><organization/></author>
<author fullname='G. J. de Groot' initials='G. J.' surname='de Groot'><organization/></author>
<author fullname='E. Lear' initials='E.' surname='Lear'><organization/></author>
<date month='February' year='1996'/>
<abstract><t>This document describes address allocation for private internets.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='5'/>
<seriesInfo name='RFC' value='1918'/>
<seriesInfo name='DOI' value='10.17487/RFC1918'/>
</reference>



<reference anchor='RFC6146' target='https://www.rfc-editor.org/info/rfc6146'>
<front>
<title>Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers</title>
<author fullname='M. Bagnulo' initials='M.' surname='Bagnulo'><organization/></author>
<author fullname='P. Matthews' initials='P.' surname='Matthews'><organization/></author>
<author fullname='I. van Beijnum' initials='I.' surname='van Beijnum'><organization/></author>
<date month='April' year='2011'/>
</front>
<seriesInfo name='RFC' value='6146'/>
<seriesInfo name='DOI' value='10.17487/RFC6146'/>
</reference>


<reference anchor="ICESDP" target="https://tools.ietf.org/html/draft-ietf-mmusic-ice-sip-sdp">
  <front>
    <title>Session Description Protocol (SDP) Offer/Answer procedures for Interactive Connectivity Establishment (ICE)</title>
    <author initials="A." surname="Keranen">
      <organization></organization>
    </author>
    <date year="2018" month="April" day="01"/>
  </front>
</reference>
<reference anchor="IPHandling" target="https://tools.ietf.org/html/draft-ietf-rtcweb-ip-handling">
  <front>
    <title>WebRTC IP Address Handling Requirements</title>
    <author initials="G." surname="Shieh">
      <organization></organization>
    </author>
    <date year="2018" month="April" day="18"/>
  </front>
</reference>
<reference anchor="Overview" target="https://tools.ietf.org/html/draft-ietf-rtcweb-overview">
  <front>
    <title>Overview: Real Time Protocols for Browser-based Applications</title>
    <author initials="H." surname="Alvestrand">
      <organization></organization>
    </author>
    <date year="2017" month="November" day="12"/>
  </front>
</reference>
<reference anchor="WebRTCSpec" target="https://w3c.github.io/webrtc-pc/">
  <front>
    <title>The WebRTC specification</title>
    <author initials="J.I." surname="Bruaroey">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="WebRTCStats" target="https://w3c.github.io/webrtc-stats/">
  <front>
    <title>Identifiers for WebRTC's Statistics API</title>
    <author initials="H." surname="Boström">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="HTMLSpec" target="https://html.spec.whatwg.org">
  <front>
    <title>HTML Living Standard</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="RTCWebSecurity" target="https://tools.ietf.org/html/draft-ietf-rtcweb-security">
  <front>
    <title>Security Considerations for WebRTC</title>
    <author initials="E." surname="Rescorla">
      <organization></organization>
    </author>
    <date year="2018" month="January" day="22"/>
  </front>
</reference>
<reference anchor="JSEP" target="https://tools.ietf.org/html/draft-ietf-rtcweb-jsep">
  <front>
    <title>JavaScript Session Establishment Protocol</title>
    <author initials="E." surname="Rescorla, Ed">
      <organization></organization>
    </author>
    <date year="2019" month="February" day="27"/>
  </front>
</reference>


    </references>



  </back>

<!-- ##markdown-source:
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
2KwN4vUO/agwW9V7DOMCpBSzsGbi06cALYLA7iYhKVtjllS8W80XXZNSxiQI
Cw76Y3KWjSN6lCfJFxJKd+YStgyKZSSiK9ZX3WZ9+1leYJu+v4GjosvBOUer
q0HJsi/qQ0JCaT8imkeJ9bV1R7lxEiRtv9qT3n4kXhJwoZerUiyfGO2UL/nq
HnRHjvhUgroiDmTjswpXpesaVzy3dWDhqrOOJA2Le7UtdpVspONnyp81XPG9
QvsgJ2V+03jwDQffOTxl1UpQDh6k+8PtDzhLeclx6yY1pa7zahQwwy3aY8cN
GlAJIBu9AwwccIndkYCCjkd31ya6KKAGEl+X5PmyxguohdpmF9MpCtGHYM7k
Tl3QZyivQawKkdITG4qjkn3GQ43yIIRnDSOayPouKIbH46PLQZqkiiPJfW4R
CGgb4lCz/4rbePf+7ZVkDxusW+Q0JA0Jc2uybPwlzrKcnZ5+/ixRPalTlK9L
kXsLAKNR/EH9UYgBG21tcgmPDAsPKMgshSg4lTA0WRg6JCX6Sgam+jtaicU5
DpxL8WzjArU2BxnwNy+WnpeFEdSiQ+eEEtbmFeQOOCaWdXLMfyeEikkk8tc4
F4bZ5z0Z4xEGhKRA3/uBVaCP4/DvveRLh7tyEWAleNQaUqq0DRxDnde+GcDW
CdIuwmZn3PegtbHl7wG45Q2L00QodsAqYxgMsQuCRWzO7aUAmyf9eSRVp1I8
KXA4grC3Tefk9V6PHYwyhaep9trl7eDbYTLW1ew/UTvh87vRrb9mjGTJ9vsk
5bR4P0Jmz7XxlcdzEq1WcUNHsbWsFRy2rRcJD2FFrpHU+2I1QWhqnrjYmW6s
6zOANxGjBV1ANs2PS7L5ll6UB1ORWCEs2biurDHJix3hPukWcakk0diJ47Su
CtPkG43OCg7nHGREp1jvQV3PRSHRYVfKlyVXqHLfYj0YmHVCEQBZQHy1ra+X
KL0vPIwxBCVqqEhEgoxYrQQL/QZ7NNJqg0n6kiAbfKPYUumZlWhS9zEi6YWG
bf44rmYC1iNsRv6lJNQpLZl+IN/PFzetWNs4NyGuQmfWRpYKW0zJdBg0KXyA
K5g/Lqsn09ZD3zbB/gVieYRKxAnrOSIsX9X5Mi/5yOUZSmdQUsJmKWx7Hdbm
+3K1geGs8yHb5NZf/O4zrpG+S3on3VocNyc+xa8udnsJkrqjfkMstW5vqp1y
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
GVcRwMF0m3hJu5oH/4TaZ8+fQP0MjYAsMT19jHeaut8RjYe+MjjC7PBwepHN
H19cuBG4c2DoK3aEe5mE/Se8b9NJ8qafJbEVa3zvxJ6ndlhyl0e9bvqS1h54
dr/aFj0xIa19p6Gs0oZHgnGC8xzwaAfHCc736X/u5mb331xkkwJWu+vmAtbb
a5PucerjP+Z/exk3FOiGSoz6Hu3X78H/+faK2WSPQX6GSmGfRcZnZ7c+O9v7
7D3W7O34bUGt+/AUbqqtvm6kUMr+bLubffXuQjH7U8vMrrTccnvXH6PzY3sJ
3P99zrHwt+afyOu3PIvOSgCpAcj6Z5sN4NbbnpWp7bMidA2BwUjqjnpS923f
Pt9nzbDiWOfea83fxs/uX/OxXXPy7XNuaaTffh0Xhy2Rf142Dr3DQYU/Cr1Y
DIiBc/2HGgH7wR6/6tnMGgE47G8Rbuwn5v4hZtEQ3hRH+u++O3AAKJlMJncD
BH/ovLP7z/vFr/6/479dzrtFeUZcaMMmfywY2fvstz2FhUz0BZ9keKDxONZe
qPkCnXwLQPx2j+qaWXVr1/SFce60t11v6ffv7U7wd//ujv3u/mAgDSIIwsPS
C+u8L8+EPsvvnHf2e+YNqDC677OZNW1A1/+yWmP4T//yComd/lH6IYQwFC3z
fzhYETcu/Hsg4LA7zndfGufp3nFCEHin9exRV9E4d1nPXrXn44VEyh+4RhgE
m8eJwyZ3W08v1iLjPLVj06k5lfcFKtMqHr6/fjF+dnn1/OXzy3cvHiWDVFYv
U+Mwvbc/Fzb8hT7pRXJrlvR8fnRqtE7H8/nMjI/P53P46ezxPh6eTdNj+P/5
+fnhISdPk+nh4eGxT5u6mWfhzLN45pPZWXJ2mj6enR7j60Wz0/Hx4dHh+LE2
i30z69lcH+nzw+l5dhLMfDow89HQnuGoTg9PTqanZ/7890x15HbEWp7vfZaL
b+Ru50M/3fHQRnm64/PpNDziPRP6jdw2YXDas8HTnn3xtOfnZ2eLk/Oz8ez0
MB0fL84Ox+c6Pd572qfm9Hx+crI4Pz0Vms8GT3v2xdOGWU7OT/TZ+Mwcz8bH
5vHJ+PGJOd03czo7n+m5OTSnj6fBzLunPbvzae/DB8f3Oe3ZPU5734Szu532
vhcWf3pg32+8761r3ynO6L3iwo/kh6Liy36H48JU3dK7marfB2m7SBpfOOJu
fkz1JnilKuYTpVM86bc4BLF77MfOsqB7Ea1i7yITLlanklhbDt3aFtj+aoJC
u3g9/j4htyzbTLKxPZibQrd0SYlUeO9Z/4jW+pEvf1LDfbTxLYBKjaX9Kw6u
yxWJsolqI83I9r1PrmMC7+aFf+m2qrdK3njCNOPbOZvk4eDVjY8f2UpKeb0q
vybSvUVIUSlIGbRVutzJE7tm2yTNN1jcekbhwdoMs1y8bLdiU8pUvE9pIX/L
nKcSUJcvHeSvplRlK3dYuhsSdq4LCBpj+L57vrKjranDg94Y1eNvps4SxGK+
NQE1gwYTefNFXtJrJjXfjEtvb9y5eN/fdjPUuK2Gj2h6OJniZcNhA/ivvcsz
eP8LFN+BhnBPeVfhNd9eIDHdm4x3r9vgsndu6w66lqhercUuI5/XqxagwKSY
d/fg6dSEylKe3ZjdbmZ+yY+rFRDGD6SBOoVLZgLRCAvsz22JIndnPCClCggt
ZXRYNMznVaAQjOnNJvbu/g3579RM7y/CpQsQqBWUBK3Dmgp8ry11utu3Erhh
pPO5pj49+6l/F5RvCCV+spen8Q2oDXWiJnA+qbTSyEW8eNdlE1z44N+8ZJek
Vtw44asz1tzmboIiQb7VtAmWj6048pLgFbVFwC+U3UvjN4N12LXc0Kfpjlqb
Aic+wZdgYnqWq+Gx5EQU5vgG7JQKWTJYu7tG3pXZ012MRRG34kphtQgk9SPg
WsAf3OiW7pnJfD9AfFWhZ106Xd86HjYCqV7z3iS5dPoeL6vyb56jqy1sm3r4
+iv75iLswKaXi1EVfbksjL2TJOzpotYdbjPnT+Xe0NCwqN49DXQSA+ZFqVdO
Wbz1RKqS56bc2subgreADWeC9/xR9oU6++1RHQAFOcBBqcaX1dzxXouR8Cbd
a7yhTm0yONE11taMjEQl0t11dUiAOQz6IQkuXQouE4CVinVGcVL8loFCXmmJ
35Ngg+s4xrdk7mgcuXTsGl8zd7LTaijXoYSSZ7serGiSvcD3hWws+1r6ShNQ
0Auq+J2SonUQ8mADM5hw2qwz8zt3Ny+jnkz7RjUFOiWr1uG7Q93ZuSuD8PJI
eTclveD4ITJ5+JJOekMntgkrosERTx7SwL/gQbs3CcS08EBkvsW3KBRV7m6p
Ks2SumVCdDP8ws4A6IARRQWnmFJX1y+ekeR0deoNNrKt2PMkLXTOd6mVoIN/
Q4pLf5h8WwXXZxIP2bfjDtigia0MD4bZZftm+D4XedE8HwleM023ktg7WgQa
Zsa+TAJfVFKlVZE0XS6XzVjGCkTIX2ii9l9oUjZ4pT3ddUCvOvB3qOD1Fl9S
EmEjtH/dw0xuy3z3DECMdV3wpLC5TK7XdhejE/CgN4/rrbJXUXbBsiyN5Aru
8L6Q4MUG4Svr5Z1w7ltInluuG4pecr/WH+jmcMClTU4tj6rFmx/au9z7DQQp
5M4cvrTDjys8T21Zmq5Gqmqd8o3Nu1eeYQuktEFjboHm5Z5xew3gEBsJRPBX
cQeTUtdw74KjTVcz46HtxSOYw54ZnvMx+Ttpgnfex83v4bXGUe+7GGrQ0bVe
2hdr9i88V9EtMne77Vw8oW2y6GoiFl8erOke3KjZtXV3KPKb5undgNtgJXhf
8eXVZc+rHvKk+/fYOKHEG6TS4E2qON5E/V8scO2LJJEAAA==

-->

</rfc>

